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其实是工厂函数。目的也是推迟实例化。
?
?
对于理解这段代码,可以从实际适用来入手。我们只需指定一个要使用的类,传给LazyObject,那么我们
使用LazyObject,就如同使用包装类一样。这种设计,应该是对用户透明的。
当我们使用类时,分为获取属性,添加属性,删除属性。
对应的三种方法,__getatrr__, __setatrr__, __delatrr__。
在python中对三种方法的重载,就可以实现上述的效果。即LazyObject与包装类是透明的。
在LazyObject的三种方法的实现中, 可以看出推迟实例化的实现。
即先判断包装类是否已经实例化,否则实例它(通过实现_setup()方法实现)。
注意到__getattr__方法,是通过 new_method_proxy函数实现的。
new_method_proxy其实是工厂函数。目的也是推迟实例化。
?
相关文章推荐
- JsonObject&JSONArray
- JSONObject简介
- nib must contain exactly one top level object which must be a UITableViewCell instance
- 29When we call objective c is runtime language what does it mean?
- 28What are mutable and immutable types in Objective C?
- 26.Difference between protocol in objective c and interfaces in java?
- Objective-C语法之动态类型(isKindOfClass, isMemberOfClass,id)等
- Objective-C 动态绑定 学习笔记
- UiDevice的UiObject的讲解
- iOS用代码实现导航栏NavigationBar与跳转(Objective-C)
- iOS & Objective-C UIScrollView 图片缩放+居中
- OC第九天 内存管理
- HScrollViewWithTitleAndSlide
- Math对象是个organizational object(集合的对象)
- iOS界面跳转与返回代码实现(Objective-C)
- JavaScript变量二(数据类型,Number,String,Object)
- JSONObject 和 JSONArray
- Object C语法学习笔记(一)
- 谈谈Objective-C的警告
- 快速开发平台CreateObject函数的用法