Присвоение неполному созданному классу

#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. Спасибо, что взяли на себя труд ответить на этот вопрос!