2012-08-08 64 views
0

我有兩種方法在裏面,一個靜態的,另一個沒有靜態類:不受約束的方法錯誤而調用靜態方法

class Person(object): 
    def getDetails(self): 
     Person.change_something(self.name) 

    @staticmethod 
    def change_something(name): 
     return name.upper() 

當我創建一個類Person的一個實例,並調用person.getDetails(),我得到錯誤,說unbound method change_something() must be called with Person instance as first argument (got str instance instead)。任何人都可以指出我在這裏做錯了什麼?

+1

你使用Python 2或3嗎? – BrenBarn 2012-08-08 08:13:20

+1

這不是一個完整的,可測試的例子(冒號缺失)。請發佈您的真實代碼,但嘗試將其簡化爲再現問題的最簡單形式(例如:self.name可以替換爲:「test」)。我們需要一個我們可以複製粘貼的代碼,包括對象創建和調用,一切。 – 2012-08-08 08:24:36

回答

3

staticmethod是描述符。描述符只適用於新式類。

class Person(object): 
+0

確實如此,但這可能是Python 3代碼,默認情況下所有類都是新建的。 – BrenBarn 2012-08-08 08:14:09

+1

@BrenBarn:如果它是Python 3代碼,那麼它會工作。 – 2012-08-08 08:14:33

+0

我也這樣做了,但是,我仍然得到相同的錯誤!順便說一句,我使用Python 2.4! – 2012-08-08 08:16:38