2011-10-07 81 views
1

我期待調用蟒蛇的方法從不同的類,像這樣:調用一個類的方法在python

class foo(): 
    def bar(name): 
     return 'hello %s' % name 

def hello(name): 
    a = foo().bar(name) 
    return a 

你好在哪裏(「世界」)將返回的「Hello World」。我知道我在這裏做錯了什麼,有人知道它是什麼嗎?我認爲這可能是我處理課程的方式,但我還沒有弄明白。

+0

我使用python 2.7,我認爲有一些語法錯誤在你的代碼, – lostyzd

+0

我們是2.5,而不是一個語法問題這是'自我'問題,回答大約4倍以下;) –

回答

6

在Python中,非靜態方法明確採用self作爲它們的第一個參數。

foo.bar()要麼需要一個靜態方法:

class foo(): 
    @staticmethod 
    def bar(name): 
     return 'hello %s' % name 

或已採取self的第一個參數:

class foo(): 
    def bar(self, name): 
     return 'hello %s' % name 

什麼情況是,在你的代碼,name被解釋爲self參數(這恰好被稱爲別的東西)。當您撥打foo().bar(name)時,Python會嘗試將兩個參數(selfname)傳遞給foo.bar(),但該方法只需要一個參數。

+0

謝謝,我只做過最小的python!不過謝謝。 –

3

你缺少實例參數在你的方法定義:

class foo(): 
    def bar(self, name): 
     return 'hello %s' % name 

或者,如果你不打算使用foo實例的任何部分聲明方法的靜態方法。差異here之間有一個很好的解釋。

3

如果它應該是一個類方法,那麼您應該使用classmethod裝飾器和參數bar。但在這種情況下這沒有意義,所以你可能想要一個staticmethod

+3

而一個'classmethod'具有這個類(通常稱爲'cls')作爲第一個參數,所以你也必須添加它。 – delnan

3

你錯過了實例參數,通常命名爲self

class foo(): 
    def bar(self, name): 
     return 'hello %s' % name