我对 Python 广泛使用“魔术方法”感到有点惊讶。
例如,为了让一个类声明实例具有“长度”,它实现了__len__
方法,当您编写时会调用该方法len(obj)
。为什么不直接定义一个len
作为对象的成员直接调用的方法,例如obj.len()
?
See also: Why does Python code use len() function instead of a length method?
AFAIK, len
在这方面很特殊并且有历史根源。
这是一个报价来自常见问题解答:
为什么Python对某些事情使用方法
功能(例如 list.index())但是
其他函数(例如 len(list))?
主要原因是历史。功能
用于那些操作
是一组类型的通用并且
其目的甚至是为
没有方法的对象
所有(例如元组)。也是
方便有一个功能可以
容易应用于非晶态
使用时的对象集合
Python 的函数特性(map()、
apply() 等)。
事实上,实现len()、max()、
min() 作为内置函数是
实际上比实现更少的代码
它们作为每种类型的方法。一罐
对个别案例有争议,但
它是 Python 的一部分,而且也是
做出如此根本性的改变已经太晚了
现在。功能必须保留
避免大量代码损坏。
其他的“神奇方法”(其实叫特殊方法在 Python 民间传说中)很有意义,并且其他语言中也存在类似的功能。它们主要用于在使用特殊语法时隐式调用的代码。
例如:
- 重载运算符(存在于 C++ 和其他语言中)
- 构造函数/析构函数
- 用于访问属性的钩子
- 元编程工具
等等...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)