And*_*rew 51 python double-underscore
我对实际的编程语言很新,而Python是我的第一个.我知道我在Linux上的方式,足以获得暑期工作(我还在上高中),在工作中,我有很多空闲时间,我正在学习Python.
有一件事让我感到高兴.当你有像这样的表达式时,Python究竟有什么不同
x.__add__(y) <==> x+y
x.__getattribute__('foo') <==> x.foo
Run Code Online (Sandbox Code Playgroud)
我知道什么方法做什么和做什么,我得到他们做的,但我的问题是:上面的双下划线方法与它们更简单的等价方法有何不同?
PS,我不介意在编程历史上讲课,事实上,我发现知道它非常有用:)如果这些主要是Python的历史方面,请随意开始漫步.
Ste*_*ski 29
以下是Python的创建者解释它:
...而不是为特殊类的类方法(例如初始化器和析构函数)设计新语法,我决定只需要用户实现具有特殊名称(如
__init__,__del__等等)的方法即可处理这些功能.此命名约定取自C,其中以下划线开头的标识符由编译器保留,并且通常具有特殊含义(例如,诸如__FILE__C预处理器中的宏 ).
...
我还使用这种技术来允许用户类重新定义Python运算符的行为.如前所述,Python在C中实现,并使用函数指针表来实现内置对象的各种功能(例如,"get attribute","add"和"call").以允许在用户定义的类中定义这些能力,我映射的各种函数指针特殊方法的名字,如
__getattr__,__add__,和__call__.这些名称与在C中实现新的Python对象时必须定义的函数指针表之间存在直接对应关系.
小智 7
那么,程序员的力量是好的,所以应该有一种方法来定制行为.像运算符重载(__add__,__div__,__ge__,...),属性访问(__getattribute__,__getattr__(这两个是不同的充),__delattr__...)等等.在许多情况下,如操作者,通常的语法图1:1至相应的方法.在其他情况下,有一个特殊的过程,在某些时候涉及调用相应的方法 - 例如,__getattr__只有在对象没有所请求的属性__getattribute__且未实现或引发AttributeError 时才调用.其中一些是非常高级的主题,可以让你深入了解对象系统的内容并且很少需要.因此无需全部学习,只需在需要/想知道时查阅参考资料.说到参考,在这里.
| 归档时间: |
|
| 查看次数: |
18866 次 |
| 最近记录: |