gpt4 book ai didi

python - 为什么 weakref 在这个绑定(bind)方法上不起作用?

转载 作者:太空狗 更新时间:2023-10-29 17:59:07 26 4
gpt4 key购买 nike

我有一个项目,我试图在回调中使用 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()

最佳答案

你想要一个 WeakMethod .

可以在配方的讨论中找到为什么您的解决方案不起作用的解释:

Normal weakref.refs to bound methods don't quite work the way one expects, because bound methods are first-class objects; weakrefs to bound methods are dead-on-arrival unless some other strong reference to the same bound method exists.

关于python - 为什么 weakref 在这个绑定(bind)方法上不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/599430/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com