#python #class
#python #класс
Вопрос:
В Python должен ли я беспокоиться о присвоении атрибута экземпляра для ссылки на класс с «неполным созданным экземпляром» (простите, если я использую неправильную терминологию)? Например:
class Child:
def __init__(self, parent):
self.p = parent
print(self.p.x)
class Parent:
def __init__(self):
self.x = 1
self.c = Child(self)
a = Parent()
Это выводит ‘1’, так что это работает. Но есть ли какие-либо недостатки в такого рода дизайне? Будет ли ссылка на еще не созданный родительский класс проблемой внутри Child.init? Спасибо за любую помощь новичку.
Комментарии:
1. Что произойдет, если вы попытаетесь создать экземпляр child?
2. Самая большая проблема заключается в том, что вы создали циклическую ссылку между этими двумя объектами, которая запутает сборщик мусора и может помешать их удалению во время работы программы, в конечном итоге израсходовав всю память. Обратная ссылка от дочернего элемента к родительскому должна быть weakref .
3. Однако простая установка ссылки на объект (кроме weakref выше) безвредна. Другое дело, если вы пытаетесь вызвать метод для частично инициализированного объекта — этот метод может коснуться вещей, которые еще не были инициализированы.
4. Спасибо, что взяли на себя труд ответить на этот вопрос!