暂时在工作中,还没有用到呢~~~

以后要留意一下,主要用于复制对象副本,

然后又有自定义属性的地方。

import copy
from collections import OrderedDictclass Book:def __init__(self, name, authors, price, **rest):self.name = nameself.authors = authorsself.price = priceself.__dict__.update(rest)def __str__(self):mylist = []ordered = OrderedDict(sorted(self.__dict__.items()))for i in ordered.keys():mylist.append('{}: {}'.format(i, ordered[i]))if i == 'price':mylist.append('$')mylist.append('\n')return ''.join(mylist)class Prototype:def __init__(self):self.objects = dict()def register(self, identifier, obj):self.objects[identifier] = objdef unregister(self, identifier):del self.objects[identifier]def clone(self, identifier, **attr):found = self.objects.get(identifier)if not found:raise ValueError('Incorrect object identifier: {}'.format(identifier))obj = copy.deepcopy(found)obj.__dict__.update(attr)return objdef main():b1 = Book('The C Programming Language', ('Brian W. Kernighan', 'Dennis M. Ritchie'),price=118, publisher='Prentice Hall', length=228, publication_date='1978-02-22',tags=('C', 'programming', 'algorithms', 'data stuctures'))prototype = Prototype()cid = 'k&r-first'prototype.register(cid, b1)b2 = prototype.clone(cid, name='The C Programming Language(ANSI', price=48.99,publisher='Prentice Hall', length=274, publication_date='1988-05-01', edition=2)for i in (b1, b2):print(i)print("ID b1 : {} != ID b2 : {}".format(id(b1), id(b2)))if __name__ == '__main__':main()

转载于:https://www.cnblogs.com/aguncn/p/9413565.html

《精通Python设计模式》学习之原型模式相关推荐

  1. 设计模式学习笔记-原型模式

    一.概述 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象: 二.模式中的角色 Prototype:声明一个克隆自身的接口: ConcretePrototype:实现一个克隆自身的操作: ...

  2. C#设计模式学习资料--原型模式

    http://blog.sina.com.cn/s/blog_40e28e4b0100995l.html http://www.cnblogs.com/ASPNET2008/archive/2009/ ...

  3. 精通python设计模式-浅谈Python设计模式 - 原型模式

    声明,本系列文章主要参考<精通Python设计模式>一书,并且参考一些资料,结合自己的一些看法来总结而来. 在<精通Python设计模式>中把设计模式分为三种类型: 创建型模式 ...

  4. 精通python设计模式-精通Python设计模式

    精通python设计模式2016年7月由人民邮电出版社出版发行,是一本学习Python设计模式方面的优秀指导教材.软件工程中,设计模式是指软件设计问题的推荐方案.设计模式一般是描述如何组织代码和使用最 ...

  5. python设计模式pdf_精通Python设计模式 高清晰PDF+源码

    精通Python设计模式讲述了16种基本设计模式,轻松解决软件设计常见问题:借力高效的Python语言,用现实例子展示各模式关键特性. 本书用实际生活中的例子带你了解常用的设计模式,介绍了诸多有关编写 ...

  6. 设计模式学习笔记——原型(Prototype)框架

    设计模式学习笔记--原型(Prototype)框架 @(设计模式)[设计模式, 原型模式, prototype] 设计模式学习笔记原型Prototype框架 基本介绍 原型案例 类图 实现代码 Pro ...

  7. python的编程模式-实例解析Python设计模式编程之桥接模式的运用

    这篇文章主要介绍了Python设计模式编程之桥接模式的运用,桥接模式主张把抽象部分与它的实现部分分离,需要的朋友可以参考下 我们先来看一个例子: #encoding=utf-8 # #by panda ...

  8. 设计模式学习之代理模式学习(一)

    设计模式学习之代理模式学习(一) 关于设计模式想必学习过Java语言的人都知道吧,当时对其进行深入学习的的人应该不是很多.在我看来设计方面的知识相比于框架应用配置等知识要有意思的多,并且设计模式的对一 ...

  9. Java描述设计模式(05):原型模式

    一.原型模式简介 1.基础概念 原型模式属于对象的创建模式.通过给出一个原型对象来指明所有创建的对象的类型,然后用复制这个原型对象的办法创建出更多同类型的对象. 2.模式结构 原型模式要求对象实现一个 ...

  10. Java设计模式学习 - 模版方法模式策略模式

    个人博客项目地址 希望各位帮忙点个star,给我加个小星星✨ 设计模式-模板方法&策略模式 简单介绍 模板方法模式(Template):定义一个操作中的算法的骨架,而将一些步骤延迟到子类中. ...

最新文章

  1. WPF xaml中列表依赖属性的定义
  2. 【转载】基于AFNetWorking3.0的图片缓存分析
  3. 国内C/C++刷题网站汇总
  4. 数据产品经理从零到一:数据产品能力模型构建
  5. Python——pip批量安装和卸载package
  6. 小小c#算法题 - 3 - 字符串语句反转
  7. 本地模式运行spark streaming程序(win7安装nc命令通信)
  8. 鸿蒙开发者测评,看了下鸿蒙开发者测试版本
  9. Flutter进阶—自定义主题风格
  10. 中国内窥镜检漏装置行业市场供需与战略研究报告
  11. mac怎么查node版本_Node.js 微服务实践:基于容器的一站式命令行工具链
  12. 使用range()以相反的顺序打印列表?
  13. Maxent Source code reading experience
  14. Python 快速设置 Excel 表格边框
  15. 愚人节、物联网、飞鸽与IP
  16. 购物车结算页面案例jQuery
  17. Navicat Premium 16 隆重登场
  18. WEB编程期末项目——我的第一个网站
  19. ESP32 LOG库使用
  20. [附源码]Java计算机毕业设计SSM房屋租赁管理系统

热门文章

  1. flask 对excel上传下载操作和文件处理
  2. Exynos4412裸机开发综合练习
  3. PHP中全局变量的使用global和$GLOBALS[]
  4. [Windows]7种网络编程I/O模型代码实现实例
  5. 纯虚函数--抽象类中的this到底指的是哪个子类实例呢
  6. uni-app微信小程序uni.navigateTo跳转无效问题;记录一次uni-app页面跳转无效,来回跳转问题;wx.navigateTo ,跳转超过10次怎么点不动的解决办法。
  7. [react] 使用Hooks要遵守哪些原则?
  8. React开发(153):ant design自定义列
  9. react学习(56)--常见HTTP错误
  10. 前端学习(2914):差值表达式的用法