2014-07-11 80 views

回答

2

不要使用staticmethod

class Foo(): 
    var = "Foo" 
    @staticmethod 
    def print_var(): 
    print(Foo.var) 

class Bar(Foo): 
    var = "Bar" 

>> Bar.print_var() 
>> "Bar 

上面的代碼打印 「富」。 至少,使用@classmethod decorator這裏:

class Foo(): 
    var = "Foo" 

    @classmethod 
    def print_var(cls): 
     print(cls.var) 

class Bar(Foo): 
    var = "Bar" 

這使得print_var的類訪問,但被傳遞到當前類的引用,因此您可以在「正確」的對象上查找var

僅當您想要從方法中刪除所有上下文並再次將其轉換爲常規函數時才使用staticmethod

演示:

>>> class Foo(): 
...  var = "Foo" 
...  @classmethod 
...  def print_var(cls): 
...   print(cls.var) 
... 
>>> class Bar(Foo): 
...  var = "Bar" 
... 
>>> Bar.print_var() 
Bar 
>>> Foo.print_var() 
Foo 
+0

揍我吧,你在'classmethod'中犯了一個錯字# –

+0

謝謝!兩者之間的界限對我來說有點模糊。 – SverkerSbrg

+0

@JamieCockburn:是的,自從糾正之後。 :-) –

2

使用classmethod

class Foo(): 
    @classmethod 
    def print_var(cls): 
     print(cls.var)