从 python 中的弱引用代理获取常规引用



有没有办法为我获得弱引用代理的对象获取正确的引用?

我已经浏览了 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,弱引用才能到达原始对象。

相关内容

  • 没有找到相关文章

最新更新