我正在制作一对儿童'类非常相似,因此想要在父类中对常用方法进行分组。当我试图从超类中访问子类的静态变量时,我的问题出现了。
以下代码引发错误: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)
答案 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
,以便您能够获得对该课程的参考。