魔术方法
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
前缀的方法可参考标准库文档。