有没有办法为我得到弱代理代理的对象获得正确的引用?
我已经浏览了weakref模块的文档,并且没有在那里得到答案,或者通过手动调用weakproxy对象。
答案 0 :(得分:3)
尽管没有直接暴露在代理对象本身上的内容,但是可以通过滥用绑定方法的__self__
属性来获得引用:
obj_ref = proxy.__repr__.__self__
这里使用__repr__
只是一个随机选择,尽管如果要使用通用方法,最好使用所有对象都应该具有的方法。
答案 1 :(得分:1)
你可以通过调用它从弱反对象获取引用:
obj = ref()
来自weakref
docs:
弱引用对象没有属性或方法,但允许使用 如果它仍然存在,则通过调用它来获得所指对象。如果指示物不再存在, 调用引用对象返回
None
。
虽然这对代理对象不起作用,但我没有看到从weakref代理获取弱引用对象或对实际对象的引用的方法。
答案 2 :(得分:0)
我不知道您所说的正确参考是什么意思,但根据: 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形成对比,在那里你必须调用,即使用()-operator on,弱引用来获取原始对象。