Python父类访问子类的类变量

时间:2014-12-27 19:58:40

标签: python inheritance

我目前正在尝试在我的Python项目中实现一些继承,并且遇到了障碍。我正在尝试创建一个baseParentClass,它将处理许多子类的基本功能。在这个具体的例子中,我试图初始化一个具有许多属性(设置为0)的实例,存储为Child中的类变量列表(称为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存储为Child中的self.ATTRS,然后在Parent中成功使用self.ATTRS,但我觉得将它们存储为类变量似乎更合适。

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

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

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

但是我想知道这是否会以某种方式破坏使用继承的重点?

我会感激任何想法,提示或反馈我是否完全咆哮错误的树!

由于

2 个答案:

答案 0 :(得分:5)

你很亲密。这有效:

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的基础类__init__中访问它。

答案 1 :(得分:0)

添加上述答案,

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

  1. 检查实例的名称空间(self。 dict )是否为ATTR变量。
  2. 如果上述操作失败,则会检查其类的命名空间。因此,虽然可以使用实例变量访问它,但它能够获取类变量的值。