有没有更好的方法来做到这一点:
def create_expired_weakref():
class Tmp: pass
ref = weakref.ref(Tmp())
assert ref() is None
return ref
上下文:我想为weakref设置一个默认状态,以便我的类可以:
def __init__(self):
self._ref = create_expired_weakref()
def get_thing(self):
r = self._ref() # I need an empty weakref for this to work the first time
if r is None:
r = SomethingExpensive()
self._ref = weakref.ref(r)
return r
最佳答案 另一种方法是在这里使用鸭子打字.如果您关心的是它就像self._ref()调用那样表现得像一个死弱的弱点,那么你可以做
self._ref = lambda : None
这是我最终使用的,当我有一个类似的愿望,如果它可用,将返回缓存值的属性,但否则无.我用这个lambda函数初始化它.然后财产是
@property
def ref(self):
return self._ref()
更新:归功于@ Aran-Fey,我认为这个想法是对这个问题的评论,而不是答案.