Python类中的属性和方法大全

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) 删除所有者类的属性
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 技术黑板 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读