簡體   English   中英

為什么pythonistas稱當前引用為“ self”而不是“ this”?

[英]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”僅表示對象正在向自身發送消息。

檢查Python歷史記錄以查找用戶定義的類:

取而代之的是,僅定義一個函數,該函數的第一個參數對應於實例,按照慣例,該實例稱為“ self”。 例如:

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

這種方法類似於我在Modula-3中看到的方法,該方法已經為我提供了導入和異常處理的語法。

這是一個與其他選擇一樣好的選擇。 您可能會問,為什么C ++,Java和C#同樣容易選擇“ this”。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM