如果你在python中检查一个方法,你会发现im_class
& im_self
个属性。如果你仔细观察,你会发现这些都是强烈的参考!
也许我独自一人;但是我想的方式,如果方法本身依赖于它们各自的类/实例(即self
参数),那么该方法应该“随船运行”,不是吗?为什么作者会选择在方法对象中存储强引用而不是弱引用?这会强制要避免使用循环引用的用户使用workarounds。有没有人有任何强烈引用类/实例的用例?
示例:
from weakref import proxy
class Foo(object):
def func(self):
pass
>>> foo = Foo()
>>> func = foo.func
>>> _foo = proxy(foo)
>>> func.im_self is _foo
False
答案 0 :(得分:0)
仅适用于方法包装器,它们绑定到类的特定实例。使用强大的参考避免了有趣的惊喜;例如,对于课程X
,func = X().foo; func()
执行您期望的内容(使用弱引用,X()
将被删除,随后的func()
调用将会意外失败)。
如果你想拥有"弱引用方法",最简单的方法就是传递(类方法,弱实例)的元组,例如: (X.foo, weakref.ref(x))
代替x.foo
。