有没有办法为我获得弱引用代理的对象获取正确的引用?
我已经浏览了 weakref 模块的文档,但无法在那里得到答案,或者通过手动戳一个弱代理对象。
尽管代理对象本身没有直接公开任何内容,但可以通过滥用绑定方法的 __self__
属性来获取引用:
obj_ref = proxy.__repr__.__self__
在这里使用 __repr__
只是一个随机选择,尽管如果您想要一个泛型方法,最好使用所有对象都应该具有的方法。
我不知道
你所说的正确引用是什么意思,但根据:https://pymotw.com/2/weakref/,
您可以像使用原始对象一样使用代理。
import weakref
class ExpensiveObject(object):
def __init__(self, name):
self.name = name
def __del__(self):
print '(Deleting %s)' % self
obj = ExpensiveObject('My Object')
r = weakref.ref(obj)
p = weakref.proxy(obj)
print 'via obj:', obj.name
print 'via ref:', r().name
print 'via proxy:', p.name
del obj
print 'via proxy:', p.name
这与使用 weakref.ref 形成对比,在 weakref.ref 中,您必须调用()运算符 on,弱引用才能到达原始对象。