Python父类访问子类的类变量

2024-10-06 11:17:26 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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__()

我可以将ATTRS作为self.ATTRS存储在Child中,然后在Parent中成功地使用self.ATTRS,但对我来说,将它们存储为类变量似乎更好。

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

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

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

但我想知道这是否会在一开始就破坏了使用继承的意义?

我会感谢任何想法,暗示或反馈,无论我是在找错树完全!

谢谢


Tags: selfchild属性initdef子类variableattrs
2条回答

加上上面的答案

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

  1. 为ATTR变量检查实例的命名空间(self.dict)。
  2. 如果上述操作失败,则它将检查其类的命名空间。因此它能够获得类变量的值,尽管它是使用实例变量访问的。

你很亲密。这是有效的:

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列表,并方便地在基类的self.ATTRS中访问它。

相关问题 更多 >