Единственное решение, которое я вижу сейчас, это то, что вы должны убедиться, что вы держите единственную ссылку на x
, все остальные должны не получить x
сам, нослабая ссылка, указывающая на x
.Слабые ссылки реализованы в модуле weakref
, и вы можете использовать его следующим образом:
>>> import weakref
>>> class TestClass(object):
... def bark(self):
... print "woof!"
... def __del__(self):
... print "destructor called"
...
>>> x = TestClass()
>>> b = weakref.proxy(x)
>>> b
<weakproxy at 0x7fa44dbddd08; to TestClass at 0x7fa44f9093d0>
>>> b.bark()
woof!
>>> del x
destructor called
>>> b.bark()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ReferenceError: weakly-referenced object no longer exists
Однако обратите внимание, что не все классы могут иметь слабые ссылки.В частности, большинство встроенных типов не могут.Некоторые встроенные типы могут иметь слабые ссылки, если вы подклассируете их (например, dict
), но другие не могут (например, int
).