您的位置:首页 > 移动开发 > Objective-C

django LazyObject类研究

2015-10-29 10:49 363 查看
django中utils包里面的functional模块里,Lazybject是推迟实例化的类。

?
从介绍来说, 可以看出LazyObject的作用就是推迟包装类的实例化,即是需要用的时候,才实例化它。

对于理解这段代码,可以从实际适用来入手。我们只需指定一个要使用的类,传给LazyObject,那么我们

使用LazyObject,就如同使用包装类一样。这种设计,应该是对用户透明的。

当我们使用类时,分为获取属性,添加属性,删除属性。

对应的三种方法,__getatrr__, __setatrr__, __delatrr__。

在python中对三种方法的重载,就可以实现上述的效果。即LazyObject与包装类是透明的。

在LazyObject的三种方法的实现中, 可以看出推迟实例化的实现。

即先判断包装类是否已经实例化,否则实例它(通过实现_setup()方法实现)。

注意到__getattr__方法,是通过 new_method_proxy函数实现的。
new_method_proxy其实是工厂函数。目的也是推迟实例化。
?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: