2016-04-28 99 views
0

我創建了幾個'Child'類,它們非常相似,因此想要在父類中對常用方法進行分組。當試圖從超類訪問子類的靜態變量時,我的問題就來了。從python中的超類訪問類的靜態變量

下面的代碼引發錯誤:NameError: name 'var' is not defined

class Parent: 
    @staticmethod 
    def do_something_with_var(): 
     print(var) 

class Child(Parent): 
    var = "Hello world" 

Child.do_something_with_var() 

我想接下來的事情顯然在Parent申報var,但同樣的錯誤仍然存​​在。

class Parent: 
    var = "" 

    @staticmethod 
    def do_something_with_var(): 
     print(var) 

class Child(Parent): 
    var = "Hello world" 

Child.do_something_with_var() 

,我發現的溶液中以接收所述發送者類,但隨後的呼叫變成有點難看:

class Parent: 
    @staticmethod 
    def do_something_with_var(cls): 
     print(cls.var) 

class Child(Parent): 
    var = "Hello world" 

Child.do_something_with_var(Child) 

回答

2

您對使用staticmethods(第三次嘗試),訪問類變量(第二次嘗試)感到困惑。

你想要做什麼是classmethods下(Python 2.7版),如下所示:

class Parent(object): 
    @classmethod 
    def do_something_with_var(cls): 
     print cls.var 

class ChildA(Parent): 
    var = "Child A" 

ChildA.do_something_with_var() # prints Child A 

這個例子就相當於你的第三次嘗試。

+0

哦,我實際上已經嘗試過你的解決方案,但我仍然在提供Child作爲參數......現在全部清楚! –

1

所述方法的靜態作用域意味着它被綁定到類範圍作爲命名空間,沒有任何對類的引用。

你需要的是有一個@classmethod,以便你能夠得到一個類的參考。