python
方法
特殊方法
说明
《Python 教程》 帮助读者成为泛程序员,持续修订中,提供建议、纠错、催更加微信 gairuo123。查看 更新日志。作者开办 Python 数据分析训练营正在报名中,详情 Python 数据分析训练营。
![]() |
本教程作者所著新书《Python之光:Python编程入门与实战》(ISBN:9787111729891)已由机械工业出版社出版上市,各大电商平台有售,欢迎:查看详情并关注购买。 |
Python 的特殊方法(有人称魔术方法)是由 Python 解释器调用的,一般情况下,我们不需要直接调用它,使用它们者是用内置函数和操作符。比如,很多对象在实现特殊方法__len__()
后,我们只需使用 len(x) 即可调用。
特殊方法 | 调用方法 | 实现功能 | 备注 |
---|---|---|---|
__new__ |
MyClass() | 创建类的新实例 | |
__init__ |
MyClass(...) | 初始化实例 | |
特殊方法 | 调用方法 | 实现功能 | 备注 |
---|---|---|---|
__len__() |
len(o) | 容器的长度 | |
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 接口。)
todo