[英]Why do pythonistas call the current reference “self” and not “this”?
Python是我最了解的語言,但奇怪的是,我仍然不知道為什么要輸入“ self”而不是像Java或PHP那樣輸入“ this”。
我知道Python比Java老,但我不知道這是從哪里來的。 特別是因為您可以使用任何名稱代替“ self”:該程序可以正常運行。
那么,這個約定從何而來?
施樂於1980年發布的Smalltalk-80使用了self
。 Objective-C(1980年代初)在C之上覆蓋了Smalltalk的功能,因此它也使用self
。 Modula-3(1988),Python(1980年代后期)和Ruby(1990年代中期)也遵循這一傳統。
C ++的歷史也可以追溯到1980年代初,因此選擇了this
而不是self
。 由於Java的設計是熟悉C / C ++開發人員來說,使用this
了。
Smalltalk使用對象相互發送消息的比喻,因此“ self”僅表示對象正在向自身發送消息。
Smalltalk,當然早於Java。
關於python, self
沒有什么特別的。 如果需要,可以改用this
:
這是一個例子:
>>> class A(object):
... def __init__(this):
... this.x = 3
...
>>> a = A()
>>> a.x
3
盡管可以隨意命名,但self
是類函數第一個參數的約定。 查閱python文檔中9.4節的第5段 ,其中說:
通常,方法的第一個參數稱為self。 這無非是一種約定:self對Python絕對沒有特殊的含義。 但是請注意,如果不遵循該約定,您的代碼對於其他Python程序員來說可能就不太可讀,並且還可以想到可能會編寫依賴於這種約定的類瀏覽器程序。
根據約定,它始於Smalltalk,但也用於Object Pascal,Python,Ruby和Objective-C。 這個答案有一個很好的解釋。
Python在這方面遵循了Smalltalk的腳步-在Smalltalk中也使用了self。 我想真正的問題應該是“為什么Bjarne決定在C ++中使用this
” ...
最初的靈感來自Modula-3,Guido於DEC引入了Modula-3:
Modula-3的最終報告大約在同一時間寫在那里。 我從那里學到的東西體現在Python的異常處理,模塊以及方法明確在其參數列表中包含“自我”的事實。
-Guido, Linux Journal采訪Guido van Rossum
我認為,由於已明確聲明它,因此看到一個稱為“ self”而不是“ this”的實際參數更有意義。 至少從語法的角度來看,“自身”不像“此”那樣依賴於上下文。
我不知道我是否足夠清楚,但是無論如何這只是主觀的欣賞。
self
不是關鍵字(*)。
根據約定, self
表示當前對象的地址
您可以在此處獲取有關self
更多信息。
為什么不this
? 好吧,這是一個慣例。 如果您更喜歡,可以將this
用於代碼。
(*)這個答案已經被移植並合並到一個問題中,該問題詢問why 'self' instead of 'this' keyword
。 由於第一行中的說明可能對其他人有用,因此我將其保留在這里。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.