2017-07-11 48 views
1

我讀過方法的第一個參數是調用方法的實例。 我不明白爲什麼當我寫這篇文章Python在使用「self」時需要位置參數

class A: 
    def printName(self, name): 
     print(name) 

A.printName("asd") 

我得到這個錯誤類型錯誤:printName()失蹤1個人需要的位置參數:「名」。 我失蹤了什麼?

+1

可能重複的[TypeError:缺少1所需的位置參數:'self'](https://stackoverflow.com/questions/17534345/typeerror-missing-1-required-positional-argument-self) –

回答

2

您需要創建一個類的實例,然後調用方法在該實例:

class A: 
    def printName(self, name): 
     print(name) 

class_instance = A() 
class_instance.printName("asd") 
+0

感謝您的答案。 我真的不知道A.printName(「asd」)不是一個實例 – akerbeltz

+0

A是一個類對象,而A()是一個新的類實例: – Andrea

+0

看看文檔:https://docs.python.org /2/tutorial/classes.html 瞭解類的基礎非常重要。玩的開心! – Andrea

0

這會工作,使用staticmethod如果你想打電話printName()而無需創建該類的實例

class A: 
    @staticmethod 
    def printName(name): 
     print(name) 

A.printName('hello') 
+0

感謝您的回答。 你可以解釋什麼是在Python中的靜態方法,爲什麼它不需要'自我', 我試過你的代碼,它甚至沒有@staticmethod工程,爲什麼? 對不起,但我有很多麻煩理解如何工作'自我'的論點 – akerbeltz

+1

@akerbeltz :) ** staticmethods **是綁定到類而不是它的對象的方法。他們不需要類實例'@ staticmethod'告訴我們正在使用'staticmethod'。在早期版本中,寫入** staticmethod **的語法不同。你可以只是谷歌獲取更多信息 – ksai

+0

自己是'this'對象的等價物。 staticmethod不是針對不同的實例,而是綁定到一個類。 – gout

相關問題