有没有办法为我获得弱引用代理的对象获取正确的引用?
我浏览了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 形成鲜明对比,您必须调用弱引用,即使用() 操作符来访问原始对象。