При использовании таких классов:
class Parent:
def __init__(self):
self.child = Child()
class Child:
def __init__(self):
print(self.parent) # error, I don't have any way to know my parent!
p = Parent()
, конечно, возвращается ошибка, потому что экземпляр Child
не имеет атрибута parent
, это нормально.
Одно решение просто определить классы следующим образом:
class Parent:
def __init__(self):
self.child = Child(self)
class Child:
def __init__(self, parent):
self.parent = parent
print(self.parent) # now it's ok!
Но в моем коде у меня много классов, и как-то раздражает необходимость передавать self
в качестве параметра все время при создании экземпляра дочернего элемента объекты:
self.child = Child(self) # pass self so that this Child instance will know its parent
и я бы предпочел оставить просто:
self.child = Child() # can this Child instance know its parent without passing self?
Есть ли способ для Python автоматически сделать вывод, что объект на самом деле является атрибутом родительского объекта, без необходимости явно передавать self
? Если да, то как получить родительский объект?
Пример: в GUI программировании при создании экземпляра кнопки, который является член Panel, который сам является членом Window и т. д. c. кажется, что мы должны все время передавать self
дочерним конструкторам.
Примечание: я бы не хотел использовать inspect
, потому что решения с ним кажутся хуже, чем просто передача self
.