Python 语言参考手册中的“Data Model”(https://docs.python.org/3/reference/datamodel.html)一章列出了 83 个特殊方法的名字,其中 47 个用于实现算术运算、位运算和比较操作。

表 1-1 和表 1-2 列出了这些方法的概况。

 这些表并没有完全按照官方文档分组。

表1-1:跟运算符无关的特殊方法

类别

方法名

字符串 / 字节序列表示形式

__repr____str____format____bytes__

数值转换

__abs____bool____complex____int____float____hash____index__

集合模拟

__len____getitem____setitem____delitem____contains__

迭代枚举

__iter____reversed____next__

可调用模拟

__call__

上下文管理

__enter____exit__

实例创建和销毁

__new____init____del__

属性管理

__getattr____getattribute____setattr____delattr____dir__

属性描述符

__get____set____delete__

跟类相关的服务

__prepare____instancecheck____subclasscheck__

表1-2:跟运算符相关的特殊方法

类别

方法名和对应的运算符

一元运算符

__neg__ -__pos__ +__abs__ abs()

众多比较运算符

__lt__ <__le__ <=__eq__ ==__ne__ !=__gt__ >__ge__ >=

算术运算符

__add__ +__sub__ -__mul__ *__truediv__ /__floordiv__ //__mod__ %__divmod__ divmod()__pow__ **pow()__round__ round()

反向算术运算符

__radd____rsub____rmul____rtruediv____rfloordiv____rmod____rdivmod____rpow__

增量赋值算术运算符

__iadd____isub____imul____itruediv____ifloordiv____imod____ipow__

位运算符

__invert__ ~__lshift__ <<__rshift__ >>__and__ &__or__ |__xor__ ^

反向位运算符

__rlshift____rrshift____rand____rxor____ror__

增量赋值位运算符

__ilshift____irshift____iand____ixor____ior__

 当交换两个操作数的位置时,就会调用反向运算符(b * a 而不是 a * b)。增量赋值运算符则是一种把中缀运算符变成赋值运算的捷径(a = a * b 就变成了 a *= b)。第 13 章会对这两者作出详细解释。