Python 用于继承类的类全局变量
我正在尝试创建一个具有一些全局参数的类,这些参数需要为该类的所有实例使用某个类方法进行配置,另一个类继承自上一个类,并使用相同的配置方法对自身进行配置 现在,这有点令人困惑;这是第一个例子:Python 用于继承类的类全局变量,python,class,inheritance,global-variables,Python,Class,Inheritance,Global Variables,我正在尝试创建一个具有一些全局参数的类,这些参数需要为该类的所有实例使用某个类方法进行配置,另一个类继承自上一个类,并使用相同的配置方法对自身进行配置 现在,这有点令人困惑;这是第一个例子: class cc_a(object): v1 = 0 v2 = 0 v3 = 0 @classmethod def set_v1(cls, vv = 0): cls.v1 = vv c1 = cc_a() c2 = cc_a() print c1
class cc_a(object):
v1 = 0
v2 = 0
v3 = 0
@classmethod
def set_v1(cls, vv = 0):
cls.v1 = vv
c1 = cc_a()
c2 = cc_a()
print c1.v1, c2.v1
c1.set_v1(100)
print c1.v1, c2.v1
在第一个示例中,代码在配置之前正确打印0 0
,在类配置之后正确打印100
,太好了
现在,从prev类继承的类应该以类似的方式运行,但不应该干扰原始类。下面是另一段代码:
class cc_a(object):
v1 = 0
v2 = 0
v3 = 0
@classmethod
def set_v1(cls, vv = 0):
cls.v1 = vv
class cc_10(cc_a):
cc_a.set_v1(10)
class cc_20(cc_a):
cc_a.set_v1(20)
c1 = cc_a()
c2 = cc_10()
c3 = cc_20()
print c1.v1, c2.v1, c3.v1
不幸的是,这打印的是20
,而不是预期的0 10 20
提前感谢您的帮助 对于您期望的行为,以下几点可行:
class cc_10(cc_a):
v1 = 10
这将从超类继承v2
和v3
,但会覆盖v1
。或者,在定义完子类后,对其调用set\u v1
:
class cc_10(cc_a):
pass
cc_10.set_v1(10)
您在子类中特别引用了
cc_a
;你期望会发生什么?@jornsharpe:是的,我知道,但我不能调用cc\u 10。例如,设置_v1(10)
,因为cc\u 10不在它自己的范围内。。。。