标签:__ 特殊 实例 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. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。