魔术方法

Python中提供了一些特殊的方法,对它们进行重载,就可以让你的类实现实例的加减乘除等操作,而且还包括一些特殊的操作,这些方法也被称为魔术方法。魔术方法以双下划线(__)开头和结束,就像之前说过的构造函数__init__()。可以通过重载这些魔术函数来实现一些Python内置的操作。下表列出了常用的Python支持的方法以及如何使用它们,具体可重载的方法可参考标准库operator

方法名使用方法
__eq__(self, other)self == other
__ne__(self, other)self != other
__lt__(self, other)self < other
__gt__(self, other)self > other
__le__(self, other)self <= other
__ge__(self, other)self >= other
__add__(self, other)self + other
__sub__(self, other)self - other
__mul__(self, other)self * other
__floordiv__(self, other)self // other
__truediv__(self, other)self / other
__mod(self, other)self % other
__pow__(self, other)self ** other
__str__(self)str(self)或者print(self)
__repr__(self)repr(self)或者print(self)
__len__(self)len(self)
__iter__(self)返回一个迭代对象,与__next__()配合使用
__next__(self)返回迭代的下一个值
__getitem__(self, key)定义按照下标访问数据,需要实现索引、切片等全部操作
__setitem__(self, key, value)定义按照下标设定数据的行为
__delitem__(self, key)定义按照下标删除数据的行为
__reversed__(self)定义调用reversed()时的行为
__contains__(self, item)定义使用成员测试in或者not in时的行为
__enter__(self)定义使用with是的初始化行为,其返回值被with的目标或者as后的变量绑定
__exit__(self, exc_type, exc_value, traceback)定义当一个with被执行或者终止后需要执行的内容,一般用来处理异常、清除等工作

其中方法__add__()__sub__()__mul__()__floordiv__()__truediv__()等都有添加i前缀的对应方法,例如__iadd__(),可以用来实现自增、自减等操作,例如a += b。其他可以使用i前缀的方法可参考标准库文档。