为什么pythonistas将当前引用称为“self”而不是“this”?

时间:2009-07-03 16:06:00

标签: python

Python是我最了解的语言,奇怪的是我仍然不知道为什么我在Java或PHP中输入“self”而不是“this”。

我知道Python比Java早,但我无法弄清楚它是从哪里来的。特别是因为您可以使用任何名称而不是“自我”:程序将正常工作。

那么这个约定来自哪里?

8 个答案:

答案 0 :(得分:65)

Xerox在1980年发布的Smalltalk-80使用了self。 Objective-C(20世纪80年代早期)将Smalltalk功能层叠在C上,因此它也使用self。 Modula-3(1988),Python(20世纪80年代后期)和Ruby(20世纪90年代中期)也遵循这一传统。

C ++,也可以追溯到20世纪80年代早期,选择this代替self。由于Java是为C / C ++开发人员所熟悉的,因此它也使用this

Smalltalk使用对象发送消息的比喻,因此“self”只表示对象正在向自己发送消息。

答案 1 :(得分:28)

检查history of Python用户定义的类:

  

相反,只需定义一个函数,其第一个参数对应于实例,按惯例,该实例名为“self”。例如:

def spam(self,y):
    print self.x, y
  

这种方法类似于我   曾见过Modula-3,它有   已经为我提供了语法   用于导入和异常处理。

这是一个与其他选择一样好的选择。你可能会问为什么C ++,Java和C#选择“这个”就好了。

答案 2 :(得分:19)

Smalltalk,当然早于Java。

答案 3 :(得分:16)

关于python,self没有什么特别之处。如果您愿意,可以使用this

以下是一个例子:

>>> class A(object):
...    def __init__(this):
...       this.x = 3
... 
>>> a = A()
>>> a.x
3

虽然您可以随意命名,但self是类函数的第一个参数的约定。查看python文档中的paragraph 5 of section 9.4,其中包含:

  

通常,方法的第一个参数称为self。这不重要   不仅仅是一个惯例:名称self绝对没有特别之处   意思是Python。但请注意,不遵守惯例   你的代码可能对其他Python程序员来说不太可读,而且确实如此   也可以想象,可以编写类浏览器程序   依赖于这样的惯例。

至于惯例,它始于Smalltalk,但也用于Object Pascal,Python,Ruby和Objective-C。 This answer有一个很好的解释。

答案 4 :(得分:8)

Python遵循Smalltalk在方面的脚步 - 在Smalltalk中也使用self。我想真正的问题应该是'为什么Bjarne决定在C ++中使用this'...

答案 5 :(得分:7)

主要的灵感来自Modula-3,Guido被引入DEC:

  

Modula-3最终报告正在进行中   大约在同一时间写在那里。   我在那里学到的东西出现了   Python的异常处理,模块,   以及方法明确的事实   在参数中包含“self”   列表。

- Guido,Linux Journal Interviews Guido van Rossum

答案 6 :(得分:6)

我认为,因为明确宣布它更有意义地看到一个名为“自我”而不是“这个”的实际论点。至少从语法的角度来看,“自我”并不像“这”那样依赖于语境。

我不知道自己是否足够清楚,但无论如何这只是一种主观的欣赏。

答案 7 :(得分:2)

self不是关键字(*)。

self按惯例表示当前对象的地址

您可以在self here上获得更多信息。

为什么不this?这是一个名字的约定。如果您更喜欢,可以使用this代码。


(*)这个答案已经从一个问why 'self' instead of 'this' keyword的问题移植和合并。由于第一行的澄清可能对其他人有用,我将它保留在这里。