【发布时间】:2018-06-07 15:13:55
【问题描述】:
我正在尝试从ClassB 的实例访问Base 类的实例属性(inst_baseA / inst_baseB),具体取决于实例的属性(对象ClassB 的self.x)。
这是我的代码:
class Base(object):
def __init__(self):
self.inst_baseA = 'base_B'
self.inst_baseB = 'base_A'
class ClassA(object):
def __init__(self):
self.node = Base()
class ClassB(ClassA):
def __init__(self):
super(ClassB, self).__init__()
self.x = 'base_A'
这是我首先尝试的:
>>> b = ClassB()
>>> getattr(b, 'node.inst_{}'.format(b.x))
Traceback (most recent call last):
File "<pyshell#26>", line 1, in <module>
getattr(b, 'node.inst_{}'.format(b.x))
AttributeError: 'ClassB' object has no attribute 'node.inst_base_A'
如果我将调用链接到 getattr,我会克服这个问题:
>>> getattr(getattr(b, 'node'), b.x)
'base_A'
出于好奇:除了对getattr 进行两次 调用之外,还有其他方法可以从孙子类中获取 Base 类的属性吗?
更新:我需要它的原因是我正在尝试: - 获取祖父类的属性(inst_baseA 或 inst_baseB) - 取决于我的实例的属性(x 的值)
所以我的代码实际上类似于:getattr(self, 'node.{}'.format(self.x))。我第一次没有正确解释它,希望现在更有意义。
【问题讨论】:
-
getattr(b.node, 'inst_base')或者更简单的b.node.inst_base? -
@MSeifert 我更新了我的问题以反映我的情况。我第一次没有做对:)
-
为什么不只是
getattr(self.node, self.x)? -
@Aran-Fey 这行得通.. 不知道我自己怎么没看到。非常感谢
标签: python inheritance