2012-10-14 15 views
12

可能重複:
Why do you need explicitly have the 「self」 argument into a Python method?爲什麼總是把自己作爲第一個參數添加到類方法中?

我明白了爲什麼自己是總是類方法的第一個參數,這非常有意義,但如果總是這樣,那麼爲什麼去通過打字的麻煩,如果每個方法的定義?爲什麼不讓它在幕後自動完成呢?

這是爲了清楚,還是有一種情況,你可能不想傳遞自我作爲第一個參數?

+6

請注意,術語* class method *表示與您認爲它的含義不同的東西。一個*方法*是一個由一個類所擁有的函數,它作用於一個實例 - 一個*類方法*是一個方法,它由一個類所擁有,它作用於這個類。你在談論前者(按照慣例採用'self''),而不是後者(按照慣例採用'cls'')。 –

+0

超級贊助回覆所有人,謝謝! –

回答

21

因爲顯式比隱式更好。通過使參數成爲明確的要求,您可以簡化代碼理解,反思和操作。它在Python FAQ中進一步擴展。

此外,你可以定義類方法(以一類,而不是實例作爲第一個參數),你可以定義靜態方法(不要拿「第一」的說法在所有):

class Foo(object): 
    def aninstancemethod(self): 
     pass 

    @classmethod 
    def aclassmethod(cls): 
     pass 

    @staticmethod 
    def astaticmethod(): 
     pass 
+8

我會爭辯*因爲明確比隱含更好*是過分簡化。 –

+1

@Lattyware:我應該可能已經解釋了更多,但* Explicit比Python的哲學核心隱含的* **更好。 –

+0

非常如此,這裏很重要,我只是爭辯說爲什麼這是Python的工作方式還有更多(也是更重要的)原因。 –

12

Guido解釋說here。基本上,方法是函數,函數不應該接受任何「隱藏」參數,否則高級設施,比如裝飾器,將無法以合理的方式處理它們。

相關問題