第二章:数据结构-weakref:对象的非永久引用-代理

2.8.4 代理
有时使用代理比使用弱引用更方便。使用代理可以像使用原对象一样,而且不要求在访问对象之前先调用代理。这说明,可以将代理传递到一个库,而这个库并不知道它接收的是一个引用而不是真正的对象。

import weakref

class ExpensiveObject:

    def __init__(self,name):
        self.name = name

    def __del__(self):
        print('(Deleting {})'.format(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)

如果引用对象被删除后再访问代理,会产生一个ReferenceError异常。
运行结果:
第二章:数据结构-weakref:对象的非永久引用-代理_第1张图片

你可能感兴趣的:(Python标准库)