我正在尝试创建一个具有一些全局参数的类,这些参数需要使用一些类方法为该类的所有实例配置,以及从前一个类继承的第二个类并使用相同的配置方法配置自身...
现在,这有点令人困惑;这是第一个示例:
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 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 20 20
而不是预期的0 10 20
提前感谢您的帮助!
对于您期望的行为,以下方法将起作用:
class cc_10(cc_a):
v1 = 10
这将继承超类的v2
和v3
,但覆盖v1
。或者,在定义完子类后对子类调用 set_v1
:
class cc_10(cc_a):
pass
cc_10.set_v1(10)