Должен ли объект Weakref вызываться каждый раз, когда к нему обращаются? - PullRequest
0 голосов
/ 27 сентября 2019

У меня есть структура класса, в которой экземпляр одного класса должен содержать ссылку на экземпляр другого класса.Прочитав некоторые другие сообщения , лучший (самый безопасный) способ сделать это - использовать слабый реф.Это выглядело бы так:

class ClassA:
    def __init__(self):
        self.my_b = ClassB(self)
        self.some_prop = 1

class ClassB:
    def __init__(self, some_a):
        self.some_a = weakref.ref(some_a)

Вопрос, который у меня возникает, заключается в том, что для доступа к some_prop через экземпляр ClassB вам потребуется вызвать ссылку, которая сделает объект доступным, согласно документации :

self.some_a().some_prop

Однако, мой вопрос заключается в том, должен ли каждый раз вызываться ссылка.Разве мы не можем просто позвонить слабому в init?Т.е.

self.some_a = weakref.ref(some_a)()

и затем получить к нему доступ (более естественно), как

self.some_a.some_prop

У меня такое ощущение, что первый вариант предпочтительнее, но я пытаюсь понять, почему.В моем случае нет никакого способа, которым указанный объект будет удален раньше другого.

...