Python 对象的延迟初始化是指,当它第一次被创建时才进行初始化,或者保存第一次创建调用的结果,然后每次调用的时候直接返回该结果。延迟初始化主要用于提高性能,避免浪费计算,并减少程序的内存需求。
这里我们用到了lazy property
方式一:
class Lazy: def __init__(self, func): self.func = func def __get__(self, instance, cls): if instance is None: return self else: value = self.func(instance) setattr(instance, self.func.__name__, value) return value # 调用: class Circle(object): def __init__(self, radius): self.radius = radius @Lazy def area(self): print('evalute') return 3.14 * self.radius ** 2 # 测试 c = Circle(4) print(c.radius) for i in range(2): print(c.area)
方式二:
def lazy_property(func): attr_name = "_lazy_" + func.__name__ @property def _lazy_property(self): if not hasattr(self, attr_name): setattr(self, attr_name, func(self)) return getattr(self, attr_name) return _lazy_property class Circle(object): def __init__(self, radius): self.radius = radius @lazy_property def area(self): print('evalute') return 3.14 * self.radius ** 2
注意:此类方法是空间换时间,是会占用内存以便达到快速响应的目的,另外如果是每次调用的结果都不一样,这类方式就不太适用了,只适用于每次调用结果都一样的代码调用优化。
转载请注明:永盟博客 » Python优化技巧之lazy property