从python中的超类访问类静态变量

时间:2016-04-28 10:39:09

标签: python python-3.x

我正在制作一对儿童'类非常相似,因此想要在父类中对常用方法进行分组。当我试图从超类中访问子类的静态变量时,我的问题出现了。

以下代码引发错误: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()

我尝试的下一件事显然是在var中声明Parent,但同样的错误仍然存​​在。

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 个答案:

答案 0 :(得分: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

此示例相当于您的第三次尝试。

答案 1 :(得分:1)

方法的静态作用域意味着它作为命名空间绑定到类作用域,而不引用该类。

您需要的是拥有@classmethod,以便您能够获得对该课程的参考。