一、跟运算符无关的特殊方法
1. 实例的创建和销毁
- __init__
- 解释:构造方法,可调用超类的构造器。这是实例级别的方法,发生在实例创建之后,用于初始化实例,给实例添加一些属性和操作
- __new__
- 解释:优先于__init__被调用。这是类级别的方法,控制类生成实例的过程,然后通常返回该类的一个实例
- __del__
- 解释:用于销毁实例化对象,释放内存空间。注:通常情况下,python的垃圾回收机制(引用计数)会自动销毁没用的实例
2. 字符串/字节序列表示形式
- __repr__
- 解释:把对象用字符串的形式表达出来,默认返回值为:"类名 + object at 内存地址",可自定义为我们想要的信息
- __str__
- 解释:与__repr__类似,不同的地方在于:__str__是在用str()或者用print()打印一个对象时被调用,并且返回的字符串对终端用户更友好
- __format__
- 解释:当字符串/字节序列对象调用format()时被调用
- __bytes__
- 解释:讲对象转换成二进制字节串,对应python内置函数bytes()
3. 数值转换
- __abs__
- 解释:对应python内置函数abs(),计算绝对值
- __bool__
- 解释:对应python内置函数bool(),判断值的真假。如果实例不存在__bool__方法,bool(object)将尝试调用实例的__len__方法,如果返回0,bool将返回False,否则返回True
- __complex__
- 解释:对应python内置函数complex(),用于创建一个值为 real + imag * j 的复数或者转化一个字符串或数为复数。如果第一个参数为字符串,则不需要指定第二个参数
- __int__
- 解释:对应python内置函数int(),用于将数字或字符串转换为整数。
- __float__
- 解释:对应python内置函数float(),用于将数字或字符串转换成浮点数。
- __hash__
- 解释:对应python内置函数hash(),用于获取一个对象的哈希值。
- __index__
- 解释:对应python内置函数index(),用于从列表中找出某个值第一个匹配项的索引位置。
4. 集合模拟
- __len__
- 解释:对应python内置函数len(),返回对象(字符、列表、元组等)长度或项目个数。注意:如果len(object)中的object是python的内置类型,那么Cpython会抄个近路,在调用__len__方法时,实际上会直接返回PyVarObject里面的ob_size属性,这里的PyVarObject是表示内存中长度可变的内置对象的C语言结构体,直接读取这个值的速度比调用一个方法快得多
- __getitem__
- 解释:如果在类中定义了这个__getitem__方法,那么这个类的实例就可以通过"实例[key]"进行取值,比如:[1,2,3][0],{‘a‘:1, ‘b‘:2}[‘a‘]
- __setitem__
- 解释:如果在类中定义了这个__setitem__方法,那么这个类的实例就可以通过"实例[key]=某值"进行赋值,比如:[1,2,3][0] = 6,{‘a‘:1, ‘b‘:2}[‘a‘] = 3
- __delitem__
- 解释:如果在类中定义了这个__delitem__方法,那么这个类的实例就可以通过"del 实例[key]"进行删除值,比如:del [1,2,3][0],del {‘a‘:1, ‘b‘:2}[‘a‘]
- __contains__
- 解释:如果在类中定义了这个__contains__方法,那么就可以通过python的"in"运算符来判断对应的值是否存在于类实例中
5. 迭代枚举
- __iter__
- 解释:对应python内置函数iter(),用来生成迭代器,可以通过for循环调用next()方法
- __reversed__
- 解释:对应python内置函数reversed(),用来生成反向迭代器,可以通过for循环调用next()方法
- __next__
- 解释:对应python内置函数next(),返回迭代器的下一个项目,迭代器中必然包含__next__方法,迭代器调用for循环将自动调用next()
6. 可调用模拟
- __call__
- 解释:如果在类中定义了这个__call__方法,那么将使得类实例对象可以像调用普通函数那样,以"对象名()"的形式使用。
7. 上下文管理
- __enter__和__exit__
- 解释:实现了上下文管理协议的上下文管理器中,必然包含了__enter__和__exit__这两个方法,比如:with语句,with语句开始运行时,调用__enter__方法,with语句运行结束时,调用__exit__方法
8. 属性管理
- __getattr__
- 解释:对应python内置函数getattr(),用于返回一个对象属性值。当访问一个对象中不存在的属性时,会抛出异常,提示不存在这个属性。而这个异常就是__getattr__方法抛出的。我们可以自定义该方法
- __getattribute__
- 解释:该方法可以拦截对对象属性的所有访问企图,当属性被访问时,自动调用该方法(只适用于新式类)。因此常用于实现一些访问某属性时执行一段代码的特性。注意:直接通过类访问类属性不会调用该方法
- __setattr__
- 解释:对应python内置函数setattr(),在对一个实例对象的属性设置值的时候,会调用到这个方法,每个设置值的方式都会进入该方法。
- __delattr__
- 解释:对应python内置函数delattr(),用于删除实例对象的属性
- __dir__
- 解释:对应python内置函数dir(),用于获取某个实例对象拥有的所有的属性名和方法名
9. 属性描述符
- __get__、__set__和__delete__
- 解释:定义三个方法中的任意一个,这个对象就会被认为是一个描述符,并且可以在被作为对象属性时重载默认的行为。如果一个对象定义了__get__()和 __set__(),它被认为是一个数据描述符,只定义__get__()被认为是非数据描述符
10. 跟类相关的业务
- __prepare__
- 解释:该方法只在元类中有用,而且必须声明为类方法,解释器调用元类的__new__之前会先调用__prepare__,使用类定义体中的属性创建映射。该方法第一个参数是元类,随后两个参数分别是要构建的类的名称和基类组成的元组,返回值必须是映射。元类构建新类的时候,该方法的返回映射会传给__new__的最后一个参数,然后在传给__init__方法
- __instancecheck__
- 解释:对应python内置函数isinstance(),检测一个实例对象是否属于某个类的实例。注意:这个方法一定要定义在元类当中才有意义
- __subclasscheck__
- 解释:对应python内置函数issubclass(),判断一个类是不是另一个类的子类。注意:这个方法一定要定义在元类当中才有意义
二、跟运算符相关的特殊方法
1. 一元运算符
2. 算数运算符
- __add__
- __sub__
- __mul__
- __truediv__
- __floordiv__
- __mod__
- __divmod__
- __pow__
- __round__
3. 比较远算符
- __lt__
- __le__
- __eq__
- __ne__
- __gt__
- __ge__
4. 反向算术运算符
- __radd__
- __rsub__
- __rmul__
- __rtruediv__
- __rfloordiv__
- __rmod__
- __rdivmod__
- __rpow__
5. 增量赋值算数运算符
- __iadd__
- __isub__
- __imul__
- __itruediv__
- __ifloordiv__
- __imod__
- __ipow__
6. 位运算符
- __invert__
- __lshift__
- __rshift__
- __and__
- __or__
- __xor__
7. 反向位运算符
- __rlshift__
- __rrshift__
- __rand__
- __ror__
- __rxor__
8. 增量赋值位运算符
- __ilshift__
- __irshift__
- __iand__
- __ior__
- __ixor__
Python常用特殊方法汇总
原文:https://www.cnblogs.com/iamgk/p/14393831.html