Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用于继承类的类全局变量_Python_Class_Inheritance_Global Variables - Fatal编程技术网

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不在它自己的范围内。。。。