Python类中的属性和方法大全
原创
©著作权归作者所有:来自51CTO博客作者带着梦想飞翔的原创作品,请联系作者获取转载授权,否则将追究法律责任
Python类中的属性和方法大全
文章目录
1.特殊属性:
属性
| 含义
|
__name__
| 类,函数,方法等效的名字。即名称
|
__module__
| 类定义所在的模块名称
|
__class__
| 对象或类所属的类
|
__bases__
| 类的基类(父类)的元组,顺序为他们在基类列表中出现的顺序
|
__doc__
| 类、函数的文档字符串,如果没有定义则为None
|
__mro__
| 类的mro,class.mro()返回的结果都保存在__mro__中。C3算法帮忙保证类的mro唯一性
|
__dict__
| 类或实例的属性,可写的字典
|
__qualname__ | 类的限定名
|
2.方法
2.1特殊内建函数与查看属性
方法
| 等效的内建函数
| 意义
| | |
1. 查看属性 | | | | |
__dir__
| dir()
| 返回类或者对象的所有成员名称列表 dir()函数操作实例就是调用__dir()__
如果没有参数,返回当前局部作用域中的名称列表。使用参数时,尝试返回该对象的有效属性列表。
| | |
2. 特殊内建函数 | | | | |
| locals()
| 返回当前作用域中的变量字典 | | |
| globals()
| 当前模块全局变量的字典 | | |
2.2实例化
方法
| 意义
|
__new__(self,*args,**kwargs)
| 示例化一个对象
该方法需要返回一个值,如果该值不少cls的实例,则会调用__init__
该方法永远都是静态方法
调用new方法前还没有实例对象,正常调用完成后会生成实例对象。
|
__init__(self)
| 对实例进行初始化,通常用来设置实例属性,基本配置信息等。
调用init方法前已经存在实例对象
|
__del__(self)
| 实例的引用次数为0时调用。即删除实例时调用。
当系统自动调用del方法后实例已经没有对象记录,等着垃圾回收gc来清理。
|
2.3可视化
方法
| 等效的内建函数
| 含义
|
__str__(self)
| str()
| str()函数、format()函数、print()函数调用,需要返回对象的字符串表达式。如果没有定义,就去调用__repr__方法返回字符串的表达。如果__repr__没有定义,就直接返回对象的内存地址信息
|
__repr__(self) | repr()
| 内建函数repr()对一个对象获取字符串表达。
调用__repr__ 方法返回字符串表达,如果__repr__ 也没有定义,就直接返回object的定义,显示内存地址信息。 |
__bytes__(self) | bytes()
| bytes()函数调用,返回一个对象的bytes表达,即返回bytes对象
|
2.4可哈希(hash)与等等运算符(==)
方法
| 等效的内建函数
| 意义
|
__hash__(self) | hash()
| 内建函数hash()调用的返回值,返回一个整数。如果定义这个方法该类的实例就可hash。
|
__eq__(self) | ==
| 对等等操作符,判断2个对象是否相等,返回值bool值
定义了这个方法,如果不提供__hash__ 方法,那么实例对象将不可hash了。 |
2.5bool
方法
| 对应的内建函数
| 意义
|
__bool__(self) | bool()
| 内建函数bool(),或者对象放在逻辑表达式的位置,调整这个函数返回布尔值。
如果对象没有定义__bool__() ,就找__len__() 返回长度,非0为真 如果__len__() 也没有定义,那么所有实例都返回真 |
3运算符重载
3.1比较运算符重载
特殊方法
| 运算符
| 含义
|
__lt__(self,other) | < | 小于运算符等效符调用的对应方法 在obj1 < obj2 时调用obj1.__lt__(obj2) |
__le__(self,other) | <= | 小于等于运算符等效符调用的对应方法 在obj1 <= obj2 时调用obj1.__le__(obj2) |
__eq__(self,other) | == | 等等运算符等效调用的对应方法 在obj1 == obj2 时调用obj1.__eq__(obj2) |
__gt__(self,other) | > | 大于运算符等效调用的对应方法 在obj1 > obj2 时调用obj1.__gt__(obj2) |
__ge__(self,other) | >= | 大于等于运算符等效调用的对应方法 在obj1 >= obj2 时调用obj1.__ge__(obj2) |
__ne__(self,other) | != | 不等运算符等效调用的对应方法 在obj1 != obj2 时调用obj1.__ne__(obj2) |
3.2算术运算符重载
特殊方法
| 运算符
| 含义
|
__add__(self,other) | + | 加法运算等效调用的对应方法 在obj1 + obj2 时调用obj1.__add__(obj2) |
__sub__(self,other) | - | 减法运算等效调用的对应方法 在obj1 - obj2 时调用obj1.__sub__(obj2) |
__mul__(self,other) | * | 乘法运算等效调用的对应方法 在obj1 * obj2 时调用obj1.__mul__(obj2) |
__truediv__(self,other) | / | 除法运算等效调用的对应方法 在obj1 / obj2 时调用obj1.__truediv__(obj2) |
__mod__(self,other) | % | **取摸运算(取余数)**等效调用的对应方法
在obj1 % obj2 时调用obj1.__mod__(obj2) |
__floordiv__(self,other) | // | 整除运算(向下取整)等效调用的对应方法 在obj1 // obj2 时调用obj1.__floordiv__(obj2) |
__pow__(self,other) | ** pow(x,n) | 次幂运算等效调用的对应方法。也等价于pow(x,n)方法 在obj1 ** obj2 时调用obj1.__pow__(obj2) |
__divmod__(self,other) | divmod(obj1,obj2)
| 获取数的商和余数组成的元组等效的对应方法 在divmod(obj1,obj2) 时调用obj1.__divmod__(obj2) |
__matmul__(self,other) | @ | 矩阵运算符等效调用的对应方法 在obj1 @ obj2 时调用obj1.__matmul__(obj2) |
__and__(self,other) | & | 与运算符等效的对应方法 在obj1 & obj2 时调用obj1.__and__(obj2) |
__or__(self,other) | | | 或运算符等效的对应方法 在obj1 | obj2 时调用obj1.__or__(obj2) |
__xor__(self,other) | ^ | 异或运算符等效的对应方法 在obj1 ^ obj2 时调用obj1.__xor__(obj2) |
__lshift__(self,other) | << | 左移运算符等效的对应方法 在obj1 << obj2 时调用obj1.__lshift__(obj2) |
__rshift__(self,other) | >> | 右移运算符等效的对应方法。 在obj1 >> obj2 时调用obj1.__rshift__(obj2) |
__invert__(self,other) | ~ | 按位取反运算符等效的对应方法 在~obj时调用obj.__invert__() |
3.3反向运算符重载
特殊方法
| 运算符
| 含义
|
| | 以下示例中。按照__iadd__ 方法来举例: obj1中必须没有定义对应的方法__add__ 。或者返回值为NotImplemented。才会调用obj2.__radd__(obj1) 来完成运算 |
__radd__(self,other) | + | 加法运算等效调用的对应方法 在obj1 + obj2 时调用obj2.__radd__(obj1) |
__rsub__(self,other) | - | 减法运算等效调用的对应方法 在obj1 - obj2 时调用obj2.__rsub__(obj1) |
__rmul__(self,other) | * | 乘法运算等效调用的对应方法 在obj1 * obj2 时调用obj2.__rmul__(obj1) |
__rtruediv__(self,other) | / | 除法运算等效调用的对应方法 在obj1 / obj2 时调用obj2.__rtruediv__(obj1) |
__rmod__(self,other) | % | **取摸运算(取余数)**等效调用的对应方法
在obj1 % obj2 时调用obj2.__rmod__(obj1) |
__rfloordiv__(self,other) | // | 整除运算(向下取整)等效调用的对应方法 在obj1 // obj2 时调用obj2.__rfloordiv__(obj1) |
__rpow__(self,other) | ** pow(x,n) | 次幂运算等效调用的对应方法。也等价于pow(x,n)方法 在obj1 ** obj2 时调用obj2.__rpow__(obj1) |
__rdivmod__(self,other) | divmod(obj1,obj2)
| 获取数的商和余数组成的元组等效的对应方法 如果obj1没有__divmod__ 方法,或者返回NotImplemented,则会调用obj2.__rdivmod__(obj1) |
__rmatmul__(self,other) | @ | 矩阵运算符等效调用的对应方法 在obj1 @ obj2 时调用obj2.__rmatmul__(obj1) |
__rand__(self,other) | & | 与运算符等效的对应方法 在obj1 & obj2 时调用obj2.__rand__(obj1) |
__ror__(self,other) | | | 或运算符等效的对应方法 在obj1 | obj2 时调用obj2.__ror__(obj1) |
__rxor__(self,other) | ^ | 异或运算符等效的对应方法 在obj1 ^ obj2 时调用obj2.__rxor__(obj1) |
__rlshift__(self,other) | << | 左移运算符等效的对应方法 在obj1 << obj2 时调用obj2.__rlshift__(obj1) |
__rrshift__(self,other) | >> | 右移运算符等效的对应方法。 在obj1 >> obj2 时调用obj2.__rrshift__(obj1) |
3.4赋值运算符的重载
特殊方法
| 运算符
| 含义
|
__iadd__(self,other) | += | 加等赋值运算等效调用的对应方法 在obj1 += obj2 时调用obj1 = obj1.__iadd__(obj2) |
__isub__(self,other) | -= | 减等赋值运算等效调用的对应方法 在obj1 -= obj2 时调用obj1 = obj1.__isub__(obj2) |
__imul__(self,other) | *= | 乘等赋值运算等效调用的对应方法 在obj1 *= obj2 时调用obj1 = obj1.__imul__(obj2) |
__itruediv__(self,other) | /= | 除等赋值运算等效调用的对应方法 在obj1 /= obj2 时调用obj1 = obj1.__itruediv__(obj2) |
__imod__(self,other) | %= | 取模等赋值运算等效调用的对应方法 在obj1 %= obj2 时调用obj1 = obj1.__imod__(obj2) |
__ifloordiv__(self,other) | //= | 整除等赋值运算符等效调用的对应方法 在obj1 //= obj2 时调用obj1 = obj1.__ifloordiv__(obj2) |
__ipow__(self,other) | **= | 次幂等运算符等效调用的对应方法 在obj1 **= obj2 时调用obj1 = obj1.__ipow__(obj2) |
__imatmul__(self,other) | @= | 矩阵等赋值运算等效调用的对应方法 在obj1 @= obj2 时调用obj1 = obj1.__imatmul__(obj2) |
__iand__(self,other) | &= | 与等赋值运算等效的对应方法 在obj1 &= obj2 时调用obj1 = obj1.__iand__(obj2) |
__ior__(self,other) | |= | 或等赋值运算等效的对应方法 在obj1 |= obj2 时调用obj1 = obj1.__ior__(obj2) |
__ixor__(self,other) | ^= | 异或等赋值运算等效的对应方法 在obj1 ^= obj2 时调用obj1 = obj1.__ixor__(obj2) |
__ilshift__(self,other) | <<= | 左移等赋值运算等效的对应方法 在obj1 <<= obj2 时调用obj1 = obj1.__ilshift__(obj2) |
__irshift__(self,other) | >>= | 右移等赋值运算等效的对应方法 在obj1 >>= obj2 时调用obj1 = obj1.__irshift__(obj2) |
4.容器相关方法
方法
| 对应的操作
| 意义
|
__len__(self) | len(obj)
| 内建函数len(),返回对象的长度(>=0的整数),如果把对象当做容器类型看,就如同list或者dict。
bool()函数调用的时候,如果没有__bool__() 方法,则会看__len__() 方法是否存在,存在返回非0为真。 |
__iter__(self) | for i in obj | 迭代容器时,调用,返回一个新的可迭代对象 |
__contains__(self,item) | x in obj | in 成员运算符,没有实现,就默认调用__iter__ 方法遍历 |
__getitem__(self,key) | obj[key] | 实现self[key]访问。序列对象,key接受整数为索引,或者切片。对于set和dict,key为可以hashable(即可哈希)。key不存在引发KeyError异常
|
__setitem__(self,key) | obj[key] = value | 和__getitem__ 的访问类似,是设置值的方法 |
__missing__(self,key) | | 字典或其子类使用__getitem__() 调用时,key不存在执行该方法 |
5.可调用对象
方法
| 等效
| 意义
|
__call__(self) | obj()
| 类中定义一个该方法,类的实例就可以像函数一样调用 |
6.上下文管理
方法
| 等价语法
| 意义
|
__enter__(self) | with obj() as c:pass 进入语句块之前执行 | 进入与此对象相关的上下文,如果存在该方法,with语法会把该方法的返回值绑定到as子句中指定的变量上
|
__exit__(self, exc_type, exc_value, traceback) | with obj() as c:pass 退出时执行 | 退出与此对象相关的上下文。时执行
|
7.反射
内建函数
| 意义
|
getattr(object,name[,default])
| 通过name返回object的属性值。当属性不存在,将使用default返回,如果没有default,则会抛出AttributeError异常。name必须为字符串
|
setattr(object,name,value)
| object的属性存在,则覆盖,不存在,新增
|
hasattr(object,name)
| 判断对象是否有这个名字的属性,name必须为字符串
|
方法
| 对应的内建函数
| 意义
|
__getattr__(self,item) | | 当通过搜索实例、实例的类及祖先类查不到属性,就会调用此方法 |
__setattr_(slef,key,values) | setattr(object,name,value) | 通过,访问实例属性,进行增加、修改都要调用它
|
__delattr__(self,item) | del obj.k | 当通过实例来删除属性时调用此方法
|
__getattribute__() | getattr(object,name[,default]) | 实例所有的属性调用都从这个方法开始
|
8.描述器
魔术方法
| 说明
|
__get__(self,instance,owner) | 获取所有者类的属性,定义了该函数,那么该类就是一个"非数据描述器"
|
__set__(self,instance,value) | 设置所有者类的属性,如果一个"非数据描述器"定义了该函数,那么就是"数据描述器"
|
__delete__(self,instance) | 删除所有者类的属性
|