关于继承:访问子类的类变量的Python父类

Python parent class accessing class variable of child class

我目前正在尝试在我的Python项目中实现一些继承,并且遇到了一个障碍。我正在尝试创建一个BaseParentClass,它将处理许多子类的基本功能。在这个特定的示例中,我试图用一些属性(设置为0)初始化一个实例,这些属性存储在子级中的类变量列表(称为attrs)中。我不确定如何在父类中使用这个属性。

1
2
3
4
5
6
7
8
9
10
11
class Parent(object):
    def __init__():
        for attr in ATTRS:
            setattr(self, attr, 0)

class Child(Parent):
    #class variable
    ATTRS = [attr1, attr2, attr3]

    def __init__():
        super(Child, self).__init__()

我可以将attr作为self.attrs存储在子级中,然后成功地在父级中使用self.attrs,但对于我来说,最好将它们存储为类变量。

或者,我可以将attrs作为参数传递,如下所示:

1
2
3
4
5
6
class Child(Parent):
    #class variable
    ATTRS = [attr1, attr2, attr3]

    def __init__():
        super(Child, self).__init__(ATTRS)

但我想知道,这是否以某种方式破坏了最初使用继承的意义?

无论我是完全错误的选择,我都会感激任何想法、提示或反馈!

谢谢


你很亲密。这项工作:

1
2
3
4
5
6
7
8
9
10
11
class Parent(object):
    def __init__(self):
        for attr in self.ATTRS:
            setattr(self, attr, 0)

class Child(Parent):
    #class variable
    ATTRS = ['attr1', 'attr2', 'attr3']

    def __init__(self):
        super(Child, self).__init__()

在这里,您将ATTRS列表设置为类级别,并在baseclass的__init__self.ATTRS中方便地访问它。


加上上面的答案,

虽然attr是子类中的类变量,但是子类的实例变量能够访问类变量attr,因为python使用名称空间执行以下操作

  • 检查attr变量的实例(self.dict)的命名空间。
  • 如果上述操作失败,那么它将检查其类的命名空间。所以它能够得到类变量的值,尽管它是使用实例变量访问的。