ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python特殊方法解析

2020-06-12 23:06:14  阅读:217  来源: 互联网

标签:__ 特殊 实例 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,运算符,调用,解析,方法,属性
来源: https://www.cnblogs.com/100-rzsyztd/p/13099105.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有