代理模式
定义
为其他对象提供一种代理以控制对这个对象的访问。
动机
对属性和方法的访问控制。
适用性
- 远程代理(Remote Proxy)为一个对象在 不同的地址空间 提供局部代表。
- 虚代理(Virtual Proxy)根据需要创建开销很大的对象。
- 保护代理(Protection Proxy)控制对原始对象的访问。
实现
class lazy_property(object):
def __init__(self, fget):
self.fget = fget
self.func_name = fget.__name__
def __get__(self, obj, cls):
if obj is None:
return None
value = self.fget(obj)
setattr(obj, self.func_name, value)
return value
class Test(object):
@lazy_property
def results(self):
print('init')
calcs = 5
return calcs
t = Test()
print(t.results)
print('')
print(t.results)