pythonistas为什么把当前的引用称为“自我”而不是“this”?
Python是我所知道的最多的语言,奇怪的是我仍然不知道为什么我要input“self”,而不是“Java”或PHP中的“this”。
我知道Python比Java老,但我不知道这是从哪里来的。 特别是因为你可以使用任何名称而不是“自我”:程序将正常工作。
那么这个惯例从哪里来?
1980年由施乐公司发布的Smalltalk-80使用了self
。 Objective-C(二十世纪八十年代早期)层的Smalltalkfunction,所以它也使用self
。 Modula-3(1988),Python(20世纪80年代末)和Ruby(90年代中期)也遵循这个传统。
C ++也可以追溯到20世纪80年代初期,而不是self
。 由于Java是为C / C ++开发人员所熟悉的,因此它也使用this
。
Smalltalk使用对象相互发送消息的隐喻,所以“自我”只是表示对象正在向自己发送消息。
检查用户定义类的Python历史logging :
相反,只需定义一个函数,它的第一个参数对应于实例,按照惯例命名为“self”。 例如:
def spam(self,y): print self.x, y
这种方法类似于我在Modula-3中看到的,它已经为我提供了导入和exception处理的语法。
这是一个好的select。 你可能会问,为什么C ++,Java和C#select“this”就像一样简单。
Smalltalk,当然,它早于Java。
关于python, self
没有什么特别之处。 如果你想要,你可以使用this
:
这是一个例子:
>>> class A(object): ... def __init__(this): ... this.x = 3 ... >>> a = A() >>> ax 3
虽然你可以任意命名,但self
是类函数第一个参数的约定。 在python文档中查看9.4节的第5段 ,它说:
通常,方法的第一个参数叫做self。 这只不过是一个惯例:名字自己对Python没有特别的意义。 但是请注意,通过不遵循惯例,您的代码对其他Python程序员来说可能会不那么可读,同样可以想象,可能会编写一个依赖于这种约定的类浏览器程序。
至于惯例,它始于Smalltalk,但也用于Object Pascal,Python,Ruby和Objective-C。 这个答案有一个很好的解释。
Python在Smalltalk的脚步跟踪方面也是在Smalltalk中使用的。 我想真正的问题应该是'为什么Bjarne决定在C ++中使用this
'…
主要灵感来自于Guido在DEC推出的Modula-3:
Modula-3的最终报告大概是在那里写的。 我在那里学到的东西出现在Python的exception处理,模块以及方法在参数列表中显式包含“self”的事实中。
– Guido, Linux Journal访谈Guido van Rossum
我认为,既然明确地宣称,看到一个名为“自我”而不是“这个”的实际论据会更有意义。 至less从语法的angular度来说,“自我”并不像“这个”那样依赖于语境。
我不知道自己是否清楚,但无论如何,这只是一个主观的欣赏。
self
不是关键字(*)。
self
通常表示当前对象的地址
你可以在这里获得更多的信息。
为什么不呢? 那么这是一个名称的约定。 如果你喜欢它,你可以使用this
代码。
(*)这个答案已经被移植到一个问题, why 'self' instead of 'this' keyword
。 正如在第一行的澄清可能对其他人有用,我把它保留在这里。