应该在每次访问Weakref对象时调用它吗?

时间:2019-09-27 12:49:17

标签: python oop weak-references

我有一个类结构,其中一个类的实例需要保存对另一个实例的引用。仔细阅读some other posts是做到这一点的最佳方法(最安全),它使用了weakref。看起来像这样:

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)

我的问题是,要通过ClassB实例访问some_prop,您将调用引用,该引用将使对象可用,as per documentation

self.some_a().some_prop

但是,我的问题是是否应该每次都调用引用。我们不能只在init中调用weakref吗?即

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

然后像

一样(更自然地)访问它
self.some_a.some_prop

我觉得首选第一种方法,但是我试图理解原因。就我而言,无法避免先删除被引用对象。

1 个答案:

答案 0 :(得分:0)

出于完整性考虑,我将编写此答案,它是@sanyash注释的副本。

  

Python垃圾收集器足够聪明,可以检测到循环引用,并在外部范围中没有引用的情况下删除两个互相引用的对象。您确实不需要使用weakref