我正在查看Python 3.2中的一些代码,我发现了一些看起来很有趣的东西。它是一个允许用户在实例化对象时对对象进行弱引用的类。这是代码:
class ReferableObject:
__instanceheap__ = []
def __new__(cls, *args, **kwargs):
self = super().__new__(*args, **kwargs)
cls.__instanceheap__.append(self)
return self
我想重点是在实例化时尝试创建对象的弱引用会导致weakref立即死亡:
>>> class A:
pass
>>> a = weakref.ref(A())
>>> a() is None
True
>>> class B(ReferableObject):
pass
>>> b = weakref.ref(B())
>>> b() is None
False
虽然有点有趣,但这对我来说似乎毫无用处。存储实例的方式使得它们在立即引用它们时不会死亡,这似乎是业余的。有什么理由可能有人想要在实例化时做出弱参考?