我对实际的编程语言相当陌生,Python 是我的第一个语言。我对 Linux 有点了解,足以用它找到一份暑期工作(我还在读高中),而且在工作中,我有很多空闲时间来学习 Python。
不过有一件事一直困扰着我。当你有这样的表达式时,Python 中到底有什么不同
x.__add__(y) <==> x+y
x.__getattribute__('foo') <==> x.foo
我知道方法的作用和用途,并且我了解它们的作用,但我的问题是:上面的那些双下划线方法与看起来更简单的等效方法有何不同?
P.S.,我不介意听关于编程历史的讲座,事实上,我发现了解它非常有用:)如果这些主要是 Python 的历史方面,请随意开始漫无目的。
这里是Python的创造者解释一下 http://python-history.blogspot.com/2009/02/adding-support-for-user-defined-classes.html:
...而不是设计一个新的语法
特殊类型的类方法(例如
作为初始化器和析构器),我
决定这些功能可以
只需要求用户即可处理
实施特殊的方法
名称如__init__
, __del__
, 和
等等。这个命名约定是
取自 C,其中标识符
以下划线开头的被保留
由编译器通常有特殊的
含义(例如,诸如__FILE__
在 C 预处理器中)。
...
我也使用这种技术来允许
用户类重新定义行为
Python 的运算符。如从前那样
值得注意的是,Python 是用 C 实现的,
使用函数指针表
实施各种能力
内置对象(例如,“获取
属性”、“添加”和“调用”)。到
允许定义这些功能
在用户定义的类中,我映射了
各种特殊函数指针
方法名称例如__getattr__
,
__add__
, and __call__
。有一个
这些之间的直接对应关系
名称和函数表
必须定义何时的指针
用 C 实现新的 Python 对象。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)