我有一个类结构,其中一个类的实例需要保存对另一个实例的引用。仔细阅读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
我觉得首选第一种方法,但是我试图理解原因。就我而言,无法避免先删除被引用对象。
答案 0 :(得分:0)
出于完整性考虑,我将编写此答案,它是@sanyash注释的副本。
Python垃圾收集器足够聪明,可以检测到循环引用,并在外部范围中没有引用的情况下删除两个互相引用的对象。您确实不需要使用
weakref
。