《Python编程实战:运用设计模式、并发和程序库创建高质量程序》—— 1.4 原型模式-阿里云开发者社区

开发者社区> 华章计算机> 正文

《Python编程实战:运用设计模式、并发和程序库创建高质量程序》—— 1.4 原型模式

简介:
+关注继续查看

本节书摘来自华章出版社《Python编程实战:运用设计模式、并发和程序库创建高质量程序》一 书中的第1章,第1.4节,作者:(美) Mark Summerfield,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.4 原型模式

如果想根据现有对象复制出新的对象并对其修改,那么可以考虑“原型模式”(Prototype Pattern)。
在前面,尤其是前一节里,大家已经看到,Python语言提供了多种创建新对象的方式,只要在运行期能够确定其类型就可以,即便只知道类型的名字,我们也能创建出实例来。
screenshot
screenshot

上面这个Point类经常出现在各种范例代码中,而在Python语言里,下面7种办法都可以创建出新的Point对象:
screenshot

point1是按照传统方式(也就是静态方式)创建的,我们把Point类对象当成构造器使用。其他point对象则是动态创建出来的,其中,在创建point2、point3和point4时,我们把类名当成参数传给相关函数。由于创建point3与point4时所用的方法都很简洁,所以我们没有必要再像创建point2时那样使用有安全隐患的eval()函数了。point4的创建原理与point3完全相同,我们调用了Python语言内置的globals()函数,这样写出来的代码更为优雅。point5是由通用的make_object()函数创建出来的,我们在调用此函数时,传入了类对象和相关参数。point6采用经典的“原型”方式创建:首先根据现有对象复制出新对象,然后在新对象上执行初始化或配置操作。point7是用point1的类对象创建出来的,创建时传入了新的参数。
由point6的创建过程可知,我们能够通过Python语言内置的copy.deepcopy()函数以“原型法”(prototyping)来创建新对象。而point7则告诉大家,这项任务在Python语言中还有更优雅的实现方式:无须先克隆现有对象,然后再修改新对象,而是可以直接用新参数来创建新对象,这样做效率会高很多。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
java并发编程实战学习(3)--基础构建模块
转自:java并发编程实战 5.3阻塞队列和生产者-消费者模式 BlockingQueue阻塞队列提供可阻塞的put和take方法,以及支持定时的offer和poll方法。如果队列已经满了,那么put方法将阻塞直到空间可用;如果队列为空,那么take方法将阻塞直到有元素可用。
847 0
JavaScript创建对象(四)——组合使用构造函数和原型模式
在JavaScript创建对象(三)——原型模式中,我们阐述了原型模式存在的两个问题:一是没办法通过构造函数初始化对象属性,二是共享引用类型的数据导致数据错乱。
825 0
10059
文章
0
问答
来源圈子
更多
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载