说明
《Python 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
Python 的特殊方法(有人称魔术方法)是由 Python 解释器调用的,一般情况下,我们不需要直接调用它,使用它们者是用内置函数和操作符。比如,很多对象在实现特殊方法__len__()
后,我们只需使用 len(x) 即可调用。
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 方法 特殊方法