Parent accessing class variable defined in child in Python?
我正在学习Python中的OOP,我很惊讶在另一篇文章中发现父类可以访问子类中定义的类变量,如下面的示例。我可以理解子类可以访问继承的父BC中定义的类变量(或者它不是继承而是其他什么东西?).什么使这成为可能?它是否意味着当子类从超类继承时,子类可以添加(及其超类可以访问)的类变量池?
1 2 3 4 5 6 7 8 9 10 11 | class Parent(object): def __init__(self): for attr in self.ATTRS: // accessing class variable defined in child? setattr(self, attr, 0) class Child(Parent): #class variable ATTRS = ['attr1', 'attr2', 'attr3'] def __init__(self): super(Child, self).__init__() |
这个例子有点扭曲。父类的定义不完整,它引用了不存在的类变量,这些变量只有在实例化类或子类时才会变得明显。
如果您的子类如下:
1 2 3 | class Child2(Parent): def __init__(self): super(Child2, self).__init__() |
那么实例化子类就不起作用了:
1 2 3 4 5 6 7 8 | Traceback (most recent call last): File"./cl.py", line 25, in <module> y=Child2() File"./cl.py", line 20, in __init__ super(Child2, self).__init__() File"./cl.py", line 6, in __init__ for attr in self.ATTRS: AttributeError: 'Child2' object has no attribute 'ATTRS' |
您必须按以下方式修复您的家长才能使其正常工作:
1 2 3 4 5 6 | class Parent(object): ATTRS = None def __init__(self): if self.ATTRS: for attr in self.ATTRS: setattr(self, attr, 0) |
它在原始示例中工作的原因是,Python是一种解释语言,因此代码只在运行时进行计算。
父级不访问类变量,因为