延迟加载模式(lazy evaluation)
代码参考引用自:https://github.com/faif/python-patterns/blob/master/lazy_evaluation.py
代码
|
|
分析
装饰器类 lazy_property 中的 __get__()方法,是为该类实现为了描述符(descriptor)。__get__() 方法是在访问类或者类实例的属性时,类实例的 __dict__ 中不存在被访问属性,类的 __dict__ 中也不存在被访问属性的情况下,会调用 __get__() 方法获取被访问属性,即例子代码中的 relatives。在执行语句 print("John's relatives: {0}".format(John.relatives)) 时,实例 Jhon 的 __dict__ 中还没有属性 relatives,所以装饰器类的 __get__ 方法被调用,为实例 Jhon 设置了 revatives 属性,达到延迟加载的效果。
本例说明的情况为,假设类 Person 的实例的 relatives 属性加载特别缓慢,在实例化 Person 类的时候暂时不要初始化该属性,找其他合适的时机再延迟加载。