对象/ 类/ 实例 && 构造方法

此外,也可以等到创建类对应的实例以后、再动态创建实例的属性
使用类变量时应该要是类.属性//实例.属性 因为类变量的作用域只限定义的这一个模块里面
Python会先查找实例变量然偶再查找对应的类变量
类实例的内置属性
obj.__dict__ 用dict的形式返回对象的属性
obj.__class__ 返回创建实例所用的类名称
类实例的内置方法
__init__(self) | 用于创建类的实例 |
__str__(self) | 设置对象以字符串类型出现时如何显示 |
__repr__(self) | 使变量以可读的形式出现,即:由返回值 |
__getattr__(self,name) | 读取或修改不存在的成员的属性的时候返回的值 |
__setattr__(self,name,value) | 此处的name表示的是对应的属性名称 |
__delattr__(self,name) | 用于删除类/实例的属性 |
__call__(self) | 如果类内包含有这个方法,那么这个类在实例化之后 是可以被调用的(类似函数) |
__len__(self) | 使这个类实例能够使用len函数 |
__add__(self,other) | 使这个类的实例能够使用加法来计算self + other并有返回值 |
__iadd__(self,other) | 使这个类实例能够进行操作self+=other并有返回值 |
__add__(self,other) | 使这个类的实例能够使用减法来计算self - other并有返回值 |
__isub__(self,other) | 使这个类实例能够进行操作self-=other并有返回值 |
__sub__(self,other) | 使这个类实例能够进行操作self-=other并有返回值 |
__mul__(self,other) | 使这个类实例能够进行操作self*other并有返回值 |
__imul__(self,other) | 使这个类实例能够进行操作self*=other并有返回值 |
__mod__(self,other) | 使这个类实例能够进行操作self%other并有返回值 |
__imod__(self,other) | 使这个类实例能够进行操作self%=other并有返回值 |
__neg__(self) | 使这个类实例能够进行操作-self并有返回值 |
__pos__(self) | 使这个类实例能够进行操作-self并有返回值 |
__eq__(self, other) | 检测这两个对象是否为相同的对象#因为默认的比较比的是地址,但是人为的比较比的是属性 |
类的继承
派生类的构造方法:必须要调用基础类的构造方法,并使用完整的基类名称
名称空间的搜索顺序:先在子类之中找到该方法/属性的内容,然后逐层,按照栈的顺序找到基类对于该属性/方法的定义
单继承、多重继承:如果几个父类中有相同的方法名的时候,默认优先调用class语句中靠前的类
类的多态
多态指的是一个类拥有多个名称相同、但是参数类型以及个数不同的方法成员。
如果同一名称、类型不同的函数出现多次、Python在处理多态时会使用同一名称、类内最后一次引用的函数。
在Python之中我们使用Len()函数 + 可变参数(*args)的形式实现类的多态
注意:在传入参数的时候*args是声明其为可变参数状态、可以有很多个参数传入函数。但是在len函数处理的时候只能由一个obj,否则会raise一个TypeError
类的封装
使用__(两个下划线)来规定一个私有的属性、编译时属性的名称变为obj._ClassName_AttributeName
如果直接使用__AttributeName或者AttributeName来访问这个属性的话,是无法访问的
或者,在类的内部定义一个get__Attribute函数来实现访问