прежде всего мои извинения в случае, если у меня есть или будут смешаны такие термины, как объект, класс, атрибут, родитель, потомок.Этот вопрос не относится к наследованию классов.
В моем основном классе (называемом родительским) я вызываю функцию, которая возвращает объект (именуемый дочерним) и присваивает его родителю в качестве атрибута.На этот дочерний элемент теперь можно ссылаться как обычно через parent.child, а дочерние атрибуты - через parent.child.attribute.
Теперь моя цель - найти способ доступа ко всем атрибутам дочернего элемента в качестве атрибутов родителя.В сущности, чтобы поднять все эти атрибуты на один уровень вверх.
Интуитивно, одно решение состоит в том, чтобы перебрать все дочерние атрибуты через child.__dict__
(или что-то подобное), а затем динамически создать атрибуты в родительском объекте, которые имеютто же имя, что и найденные атрибуты.Однако это кажется довольно неэффективным, и я читал, что динамического создания переменных следует избегать, когда это возможно.
Первоначально
def stub_that_returns_object():
return Child()
class Parent():
def __init__(self):
self.child = stub_that_returns_object()
class Child():
def __init__(self):
self.somestr= "foo"
self.someint = 42
self.someobj = object()
p = Parent()
print(p.child.somestr)
Теперь мне нужен какой-то умный способ вызова функции неизменяемой (!) Stub_that_returns_object ", но вместо использования дочернего объекта я хочу иметь возможность доступа к атрибутам.как
p = Parent()
print(p.somestr)
... и т. д.
Надеюсь, я немного понял себя. Дочерний объект может быть удален в процессе повышения всех его атрибутов.
Спасибо!