OOP

面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想。在Python中,所有数据类型都可以视为对象,当然也可以自定义对象。自定义的对象数据类型就是面向对象中的类(Class)的概念。数据封装、继承和多态是面向对象的三大特点。

类和实例

1.类,是抽象的模板,类似于 ES5 中的构造函数,只不过在 Python 中,类是通过 class 关键字来定义的,习惯上,类名首字母大写:

#class 关键字后面是 类名,紧接着是小括号,里面表示从哪个类继承
class Student(object):
pass

2.实例的创建很简单,就是类名加小括号,小括号里面可以添加类里面的参数

zx = Student()

3.类里面可以添加所有实例都拥有的属性。这是通过定义 init 方法来实现的

class Student(object):
def __init__(self,name,score):
self.name = name
self.score = score xf = Student('qxf',99) print(xf.name)
print(xf.score)

4.数据封装,通过上面方法添加的属性可以直接通过类里面的方法进行访问。

class Student():
def _init_(self,name,score):
self.name = name
self.score = score
def show(self):
print(self.name,'的成绩是',self.score) qq = Student('jq',99) qq.show()

访问限制

我们可以通过在属性名面前添加“__” 的方式来定义私有属性,私有属性不能通过实例对象直接访问

class NewObj():
def __init__(self,name,score):
self.__name = name
self.__score = score newZx = NewObj('zx',99) #会报错
print(newZx.__name)

关于继承

当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类、父类或超类(Base class、Super class)。子类可以直接调用父类的方法。

class Animal():
def __init__(self,name='Animal'):
self.name = name
def run(self):
print(self.name) class Cat(Animal):
pass cat = Cat('cat')
cat.run() #cat

关于多态

当子类和父类都存在相同的run()方法时,我们说,子类的run()覆盖了父类的run(),在代码运行的时候,总是会调用子类的run()。这样,我们就获得了继承的另一个好处:多态。对于上面的代码,如果为子类添加一个新的 run 方法,代码调用的时候总会调用子类的方法。

class Cat(Animal):
def run(self):
print(r'run 什么 run') cat = Cat('cat')
cat.run() #run 什么 run

type(),isinstance(),dir(),getattr(),setattr(),hasattr()

1.type()函数可以判断对象类型,包括基本类型

type(123)		#<class "int">

2.isinstance() 函数判断类型是否为输入第二参数的类型,并返回布尔值

isinstance('a',str)			#true

3.dir() 函数返回一个包含字符串的 list ,list 中包含被测对象的所有属性

4.getattr() 和 setattr() 可以直接操作一个对象的状态

getattr(obj,'x')		#获取 obj 的 'x' 属性,如果不存在会报错
getattr(obj,'x','default') #可以通过添加额外一个参数来解决报错,如果不存在,返回 'default'
setattr(obj,'y',90) #设置 obj 的 'y' 属性为 90

5.hasattr() 函数检测对象是否存在某方法,返回布尔值

slots

通过定义 slots 变量,我们可以限制 class 实例能够添加的属性

class Student(object):
__slots__ = ('name') Xf = Student()
Xf.score = 99 #会报错

@property

在绑定属性的时候,为了安全,我们会定义一些私有属性。比如我们需要检查更改数值是否正确的时候。我们可以使用 @property 来实现

#@property
class Student(object):
def __init__(self,score = 60):
self._score = score @property
def score(self):
return self._score #使用@property会生成另外一个监视器@***.setter 。用以实现重新赋值操作
@score.setter
def score(self,val):
if not isinstance(val,int):
raise ValueError('score must be an integer')
if val < 0 or val > 100:
raise ValueError('score must between 0-100') self._score = val a = Student(90)
print(a.score)
#a.score = 9999 #报错

多重继承

一个子类可以继承多个父类,继承之间存在顺序

class Student(object):
pass class Child(object):
pass class Boy(Child,Student):
pass # Boy 继承 Child 和 Student 的属性和方法,有同名时顺序为 Boy-Child-Student

Python 第七天的更多相关文章

  1. 简学Python第七章__class面向对象高级用法与反射

    Python第七章__class面向对象高级用法与反射 欢迎加入Linux_Python学习群  群号:478616847 目录: Python中关于oop的常用术语 类的特殊方法 元类 反射 一.P ...

  2. 初学Python(七)——控制语句

    初学Python(七)——控制语句 初学Python,主要整理一些学习到的知识点,这次是控制语句. if : #-*- coding:utf-8 -*- age=raw_input('input yo ...

  3. Python第七天 函数 函数参数 函数里的变量 函数返回值 多类型传值 函数递归调用 匿名函数 内置函数

    Python第七天   函数  函数参数   函数里的变量   函数返回值  多类型传值     函数递归调用   匿名函数   内置函数 目录 Pycharm使用技巧(转载) Python第一天   ...

  4. Python在七牛云平台的应用(三)简单的人脸识别

    前言 这是最后一篇介绍python在七牛云平台的应用了,因为-前两篇文章第一篇分享了怎么安装七牛的官方库以及怎么对自己的空间进行下载上传,删除等行动.而第二篇则分享了怎么利用七牛的API接口,由于七牛 ...

  5. Python在七牛云平台的应用(二)图片瘦身

    (一)七牛云平台的图片瘦身功能简介:(引用自官网) 针对jpeg.png格式图片 瘦身后分辨率不变,格式不变. 肉眼画质不变. 图片体积大幅减少,节省 CDN 流量 官网给的图片压缩率很高,官网给的「 ...

  6. Python实现七牛云视频播放

    这篇文章是使用Python的Web框架Django Rest Framework来提供视频相关的api接口,主要功能包括视频上传.视频转码.视频访问授权.删除视频文件.视频截图功能. 七牛云上的基本概 ...

  7. 孤荷凌寒自学python第七十九天开始写Python的第一个爬虫9并使用pydocx模块将结果写入word文档

    孤荷凌寒自学python第七十九天开始写Python的第一个爬虫9 (完整学习过程屏幕记录视频地址在文末) 今天在上一天的基础上继续完成对我的第一个代码程序的书写. 到今天终于完成了对docx模块针对 ...

  8. 孤荷凌寒自学python第七十八天开始写Python的第一个爬虫8

    孤荷凌寒自学python第七十八天开始写Python的第一个爬虫8 (完整学习过程屏幕记录视频地址在文末) 今天在上一天的基础上继续完成对我的第一个代码程序的书写. 到今天止基本完成了对docx模块针 ...

  9. 孤荷凌寒自学python第七十七天开始写Python的第一个爬虫7

    孤荷凌寒自学python第七十七天开始写Python的第一个爬虫7 (完整学习过程屏幕记录视频地址在文末) 今天在上一天的基础上继续完成对我的第一个代码程序的书写. 今天的学习仍然是在纯粹对docx模 ...

  10. 孤荷凌寒自学python第七十六天开始写Python的第一个爬虫6

    孤荷凌寒自学python第七十六天开始写Python的第一个爬虫6 (完整学习过程屏幕记录视频地址在文末) 今天在上一天的基础上继续完成对我的第一个代码程序的书写. 不过由于对python-docx模 ...

随机推荐

  1. javascript运动框架(三)

    迟到了好几天,不好意思哈!继续来优化一下javascript运动框架的代码.之前的代码存在bug,当重复点击时速度会加快,那么怎么解决这个bug呢? 现在我们就来解决一下,其实很简单,在开始运动时,关 ...

  2. Spark认识&环境搭建&运行第一个Spark程序

    摘要:Spark作为新一代大数据计算引擎,因为内存计算的特性,具有比hadoop更快的计算速度.这里总结下对Spark的认识.虚拟机Spark安装.Spark开发环境搭建及编写第一个scala程序.运 ...

  3. 读书共享 Primer Plus C-part 8

    第十三章 文件输入/输出 fopen--fclose fopen 是文件的操作的开始 fclose是文件操作的结束 getc--putc getchar--putchar getc对应文件的获取单个字 ...

  4. 软考 程序员 下午考题 c语言 笔记

    1. 数组名 是表示数组空间首地址的指针常量,程序中不允许对常量赋值. 如 int  a[];   a就是数组名,表示数组控件首地址的指针常量 a = 0;是错误的,不允许对指针常量赋值 &a ...

  5. HttpServletResponse addHeader() 与 setHeader() 区别

    对于addHeader() 和 setHeader()这两个方法,可能我们在需要的时候,用起来感觉都一样,都能达到想要的效果.但是这两个方法本质上是不一样的.  setHeader(name, val ...

  6. 使用JS开发桌面端应用程序NW.js-3-开发问题小记

    前言 因为我们的项目是2C的,而XP系统是最大的用户量占比,所以只能使用nw开发而不能用Electron,本文谨记开发nw过程中遇到的各种问题以及解决方案. nw.Window.open打开新窗口不能 ...

  7. 通过ALM OTA API获取test case的信息,并上传测试结果到test set中

    ALM提供了OTA接口,可以用来获取和上传测试数据到ALM.比如获取Test case的step信息.上传测试结果到test instance. 在ALM的Help中可以下载相关文档,这里以ALM11 ...

  8. 中缀表达式变后缀表达式、后缀表达式(逆波兰)求值(python版本)

    定义: 中缀表达式: 在通常的表达式中,二元运算符总是置于与之相关的两个运算对象之间,这种表示法也称为中缀表达式 后缀表达式: 又叫逆波兰表达式 ,不包含括号,运算符放在两个运算对象的后面,所有的计算 ...

  9. 使用boost/property_tree进行XML操作

    之前一直用tinyxml来进行XML文件操作,刚刚接触的一个测试项目是使用boost操作的,虽然不清楚这两者的差异,但boost使用起来还挺方便的,所以简单整理一些关于boost解析和创建XML文件的 ...

  10. StrutsPreparedAndExcuteFilter与Interceptor

    filter详解 Filter种类(可以进行那些预处理) 用户授权的Filter:Filter负责检查用户请求,对用户访问权限的控制 日志Filter:详细记录某些特殊的用户请求. 负责解码的Filt ...