Python常用特殊方法汇总
标签:结构 方法 内置函数 解释器 浮点 增量 回收机制 垃圾 size
一、跟运算符无关的特殊方法
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常用特殊方法汇总
标签:结构 方法 内置函数 解释器 浮点 增量 回收机制 垃圾 size
原文地址:https://www.cnblogs.com/iamgk/p/14393831.html
评论