2016-04-28 96 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,以便你能够得到一个类的参考。