【问题标题】:Python parent class accessing class variable of child classPython父类访问子类的类变量
【发布时间】:2014-12-27 19:58:39
【问题描述】:

我目前正在尝试在我的 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__()

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

或者,我可以像这样将 ATTRS 作为参数传递:

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

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

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

无论我是否完全错误地吠叫了任何想法、提示或反馈,我都将不胜感激!

谢谢

【问题讨论】:

  • 当你尝试时会发生什么?

标签: python inheritance


【解决方案1】:

你很亲密。这有效:

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

【讨论】:

    【解决方案2】:

    添加到上面的答案,

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

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

    【讨论】:

      猜你喜欢
      • 2011-04-08
      • 1970-01-01
      • 2012-06-04
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-15
      相关资源
      最近更新 更多