python特殊方法解析

首先什么是特殊方法?

特殊方法从名称上看都是以双下划线开头和结尾的函数,他们通常不需要直接调用,当python解释器遇到某些句法时会调用对应的特殊方法。

比如obj[key]在python解释的时候就会调用__getitem__方法,这种常用的写法又等同于obj.__getitem__(key)。

下面是自己整理的常用的特殊方法汇总

类别方法名说明方法名说明
字符串和字节序列__repr__用来实现对象的合理字符串表达形式(正式,通常用于调试),当需要__str__方法,但它不存在时,python会使用此(__repr__)方法代替,返回值必须为字符串__str__用来实现对象的非正式描述,print,format,str方法使用时会调用此方法,返回值必须为字符串
__format__通过format方法调用,重写复杂,详细参考官方文档__bytes__通过bytes方法调用,详细参考官方文档
数值转换__abs__通过abs方法调用,实现绝对值的功能__bool__通过bool方法调用,实现真值的检测或是转换,当未实现此方法时,转用len方法的返回值判定
__complex__通过complex方法调用,实现实数转化为复数的功能__int__通过int方法调用,将参数转化为整型
__float__通过float方法调用,将参数转化为浮点型__hash__通过hash方法调用,通过参数对哈希集操作,详细参考官方文档
__index__通过gbj.index方法调用,返回参数(容器存放内容)的下标  
集合模拟__len__通过len方法调用,返回对象的长度(>=0)__getitem__通过self[key]获取值,特别要注意的是参数为切片或是int型(负数)
__setitem__通过self[key]赋值__delitem__通过self[key]删除值
__contains__ 与in类似,优于in,无法通过别的方法调用,详细见官方文档    
迭代 __item__此方法在需要为容器创建迭代器时被调用,返回迭代器对象, __reversed__此方法(如果存在)会被 reverse调用以实现逆向迭代
 __next__迭代器调用,用来枚举下一个元素  
上下文管理 __enter__with语句会绑定这个方法知道结束,详细参考官方文档 __exit__退出关联对象上下文,有异常和无异常的处理方式参考官方文档   
实例创建初始化和销毁 __new__在实例创建时调用 __init__在创建实例成功后执行的初始化方法
 __del__ 在实例将被销毁时调用  
属性管理 __getattr__当默认属性访问因引发AttributeError 而失败时被调用,详细参考官方文档 __getattribute__此方法会无条件地被调用以实现对类实例属性的访问,如果还实现了__getattr__,则__getattr__不会被调用 
 __setattr__ 此方法在一个属性被尝试赋值时被调用__delattr__ 此方法在一个属性被尝试删除时被调用。
__dir__此方法会在对相应对象调用 dir() 时被调用。返回值必须为一个序列,dir()会把返回的序列转换为列表并对其排序。  
属性描述符 __get__调用此方法以获取所有者类的属性(类属性访问)或该类的实例的属性(实例属性访问) __set__调用此方法以设置 第一个参数指定的所有者类的实例的属性为新值(第二个参数)。
__del__调用此方法以删除第一个参数指定的所有者类的实例的属性  
和运算符相关的特殊方法
 类别     方法对应运算符方法对应运算符方法对应运算符
  一元运算  __neg__ - __pos__      +   
  比较运算符  __lt__ < __le__ <=__eq__  == 
__ne__!=__gt__>__ge__>=
  算数运算符__add__  + __sub__ __mul__ * 
__truediv__/__floordiv__//__mod__%
__pow__**或pow()__round__round()  
  增量赋值运算符 __iadd__+=  __isub__ -=__imul__ *=  
__itruediv__/=__ifloordiv__//=__imod__%=
  位运算符 __invert__ ~__lshift__  << __rshift__>>  
__and__&__or__|__xor__^

分类参考书籍:《流畅的python》

内容参考官方文档:https://docs.python.org/zh-cn/3.7/reference/datamodel.html#

如有问题请联系我qq:1009981067

相关推荐