python特殊方法解析

Posted 100-rzsyztd

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

以上是关于python特殊方法解析的主要内容,如果未能解决你的问题,请参考以下文章

Python 数据模型

Python 定制类 特殊方法

Python类的特殊方法

SAX 的 characters() 方法未解析 Text 节点中的特殊字符

菜鸟心得_Python中的特殊方法

python特殊方法