说明
《Python 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
Python 的特殊方法(有人称魔术方法)是由 Python 解释器调用的,一般情况下,我们不需要直接调用它,使用它们者是用内置函数和操作符。比如,很多对象在实现特殊方法__len__()
后,我们只需使用 len(x) 即可调用。
__init__()
对象初始化 - __len__()
容器长度 - __new__()
创造类实例 - __subclasses__()
子类的弱引用列表 - __repr__()
对象字符串形式 - __str__()
对象可读字符串形式 - __bytes__()
对象的字节串表示 - __format__()
对象格式化字符 - __lt__()
等富比较特殊方法 - __hash__()
对象的哈希值 - __bool__()
对象布尔值 - __getattr__()
等自定义属性访问特殊方法 - __dir__()
对象的属性和方法列表 - __get__()
等描述器特殊方法 - __call__()
模拟可调用对象 - __length_hint__()
对象长度估计值 - __getitem__()
等切片和抽取功能的特殊方法 - __missing__()
处理字典缺失键 - __iter__()
对象迭代行为 - __next__()
实现迭代器协议 - __reversed__()
实现逆向迭代 - __contains__()
实现成员检测 - __add__()
等模拟数字类型特殊方法 - __radd__()
反向数字运算符特殊方法 - __iadd__()
数字运算原地操作特殊方法 - __neg__()
实现负号-运算 - __pos__()
实现加号+运算 - __abs__()
实现 abs(obj) - __invert__()
实现取反~操作 - __complex__()
实现复数 complex(obj) - __int__()
实现 int(obj) - __float__()
实现 float(obj) - __index__()
对象的索引值 - __round__()
实现 round(obj) - __trunc__()
实现 math.trunc(obj) - __floor__()
实现 math.floor(obj) - __ceil__()
实现 math.ceil(obj)Python 保留的影响对象高层次行为和与操作符交互行为的实例方法,这些方法被称为特殊方法(special method)。 魔术方法(magic method)是它的非正式叫法。特殊方法一种由 Python 隐式调用的方法,用来对某个类型执行特定操作例如相加等等。这种方法的名称的首尾都为双下划线(Dunder,Double Underscore)。
一个类可以通过定义具有特殊名称的方法来实现由特殊语法(例如算术运算或下标和切片)调用的某些操作。 这是 Python 的运算符重载方法,允许类根据语言运算符定义自己的行为。 例如,如果一个类定义了一个名为 __getitem__()
的方法,而 x 是该类的一个实例,那么 x[i]
大致等价于 type(x).__getitem__(x, i)
。 除非另有说明,否则在未定义适当的方法(通常是 AttributeError 或 TypeError)时,尝试执行操作会引发异常。
将特殊方法设置为 None 表示相应的操作不可用。 例如,如果一个类将 __iter__()
设置为 None,则该类是不可迭代的,因此在其实例上调用 iter() 将引发 TypeError(不会退回到 __getitem__()
)。但是,__hash__()
、__iter__()
、__reversed__()
和 __contains__()
方法对此有特殊处理; 其他仍然会引发 TypeError,但可以通过依赖 None 不可调用的行为来做到这一点。
在实现模拟任何内置类型的类时,重要的是仅在对被建模对象有意义的程度上实现模拟。 例如,某些序列可能适用于检索单个元素,但提取切片可能没有意义。 (其中一个例子是 W3C 文档对象模型中的 NodeList 接口。)
更新时间:2024-04-02 10:48:01 标签:python 方法 特殊方法