用于继承类的类全局变量



我正在尝试创建一个具有一些全局参数的类,这些参数需要使用一些类方法为该类的所有实例配置,以及从前一个类继承的第二个类并使用相同的配置方法配置自身...

现在,这有点令人困惑;这是第一个示例:

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

这将继承超类的v2v3,但覆盖v1。或者,在定义完子类对子类调用 set_v1

class cc_10(cc_a):
    pass
cc_10.set_v1(10)

相关内容

  • 没有找到相关文章

最新更新