8

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

我浏览了weakref 模块的文档,但在那里找不到答案,或者手动戳了一个弱代理对象。

4

2 回答 2

4

尽管代理对象本身并没有直接暴露任何东西,但是可以通过滥用__self__绑定方法的属性来获取引用:

obj_ref = proxy.__repr__.__self__

在这里使用__repr__只是一个随机选择,尽管如果您想要一个通用方法,最好使用所有对象都应该具有的方法。

于 2020-06-02T03:27:43.240 回答
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 形成鲜明对比,您必须调用弱引用,即使用() 操作符来访问原始对象。

于 2021-06-28T14:00:39.140 回答