Я пытаюсь получить доступ к атрибуту экземпляра (inst_baseA / inst_baseB
) класса Base
из экземпляра ClassB
, в зависимости от атрибута экземпляра (self.x
объекта ClassB).
Вот мой код:
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
?
Обновление: причина, по которой мне это нужно, заключается в том, что я пытаюсь: - получить атрибут класса прародителя (либо inst_baseA, либо inst_baseB) - в зависимости от атрибута в моем экземпляре (значение x)
Итак, мой кодна самом деле что-то вроде: getattr(self, 'node.{}'.format(self.x))
.Я не объяснил это правильно в первый раз, надеюсь, теперь это имеет больше смысла.