Asa*_*ers 11 python weak-references
我有一个项目,我试图使用带有回调的weakrefs,我不明白我做错了什么.我创建了简化测试,显示了我与之混淆的确切行为.
为什么在这个测试中test_a按预期工作,但self.MyCallbackB的weakref在类初始化和调用test_b之间消失了?我想只要实例(a)存在,对self.MyCallbackB的引用应该存在,但事实并非如此.
import weakref
class A(object):
def __init__(self):
def MyCallbackA():
print 'MyCallbackA'
self.MyCallbackA = MyCallbackA
self._testA = weakref.proxy(self.MyCallbackA)
self._testB = weakref.proxy(self.MyCallbackB)
def MyCallbackB(self):
print 'MyCallbackB'
def test_a(self):
self._testA()
def test_b(self):
self._testB()
if __name__ == '__main__':
a = A()
a.test_a()
a.test_b()
Run Code Online (Sandbox Code Playgroud)
Pan*_*rat 12
你想要一个WeakMethod.
解释为什么您的解决方案不起作用的解释可以在配方的讨论中找到:
正常的weakref.refs到绑定方法并不像人们期望的那样工作,因为绑定方法是第一类对象; weakrefs到bound方法是死的,除非存在对相同绑定方法的其他强引用.
| 归档时间: |
|
| 查看次数: |
2233 次 |
| 最近记录: |