《精通Python设计模式》学习之原型模式

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/413610.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

alipay.data.bill.balance.query ISV权限不足

alipay.data.bill.balance.query ISV权限不足alipay.data.bill.balance.query是支付宝商家账户当前余额查询接口;目前调用该接口返回 ISV权限不足 完整返回: {"body":"{"alipay_data_bill_balance_query_response":{"cod…

洛谷 P1063 能量项链 区间dp

洛谷 P1063 题意:在一串项链中,是环状的,第 i 颗珠子有两个能量a[i]和a[i1],第i1颗珠子有两个能量a[i1]和a[i2],可以合并两个珠子,得到a[i]*a[i1]*a[i2]的能量,这两个珠子合并成a[i]和a[i2]的新珠子,问通过…

支付宝第三方授权登陆

支付宝微信第三方软件的接入,也是越来越流行,最近也稍微研究了一下,支付宝和微信的登陆接入。 由于本人是做Java后台发开的,所以前端app集成没有涉及,研究的是网页和后台部分。 做第三方软件的​接入,…

解决IntelliJ创建Maven项目一直显Loading archetype list

最近在使用idea的过程中,创建maven项目,一直会遇到这个问题,查了很多资料,最终解决啦。 网上普遍存在两种方式 但是我是用第三种方式解决的..... 首先,说说前两种方式, 1.删除{User_Home}/.IntelliJIdea{V…

flex布局-笔记

一 、flex布局 弹性布局,灵活性 .box{display: flex;display: -webkit-flex; /* Webkit内核的浏览器,必须加上-webkit前缀。 */ /* 行内元素也可以使用弹性布局。 display: inline-flex;*/ /*弹性布局后,子元素的float、clear和vertical-ali…

​​使用win7超级终端连接华为交换机并配置端口镜像

​ 首先,用console连接主机和交换机,打开超级终端,(注意:一定要用win7系统配置)如图所示: ​ ​ 新建连接时名字随意,但要注意不能是下面图标: ​ 然后出现下面这…

电脑安装打印机设备搜索不到解决记录

下面以windows10举例,打印机设备为HP品牌 1.打开控制面板选择查看打印机设备, 选择添加打印机,搜索不出的时候选择我所需的打印机未列出 选择第三个选项:使用TCP/IP地址或主机名添加打印机,点击下一步 填写打印机主机名…

用原生PHP做Blog系统-Day01

目标 用原声PHP,不用框架,写一个博客发布系统,后台管理文章,用户,前台展示。 技术栈 PHPAJAXJavaScript JQueryHTML前端 WordPress阿里百秀模板 后端样式 转载于:https://www.cnblogs.com/huxiaoyi/p/9445565.html

支付宝APP支付 错误代码 insufficient-isv-permissions 错误原因: ISV权限不足

首先,你得搞清楚支付方式: 支付宝支付分为:APP支付 以及 网站支付 两种,所以你要去确认你签约的到底是哪种。 于是,如果签约与调用的一致 解决办法: 登录开放平台 -> 研发管理-> 我的应用->…

elasticSearch的安装步骤~

Elasticsearch是一个实时的分布式搜索和分析引擎,关于elasticsearch和solr的比较和使用场景请自行百度。 1. 机器环境 Centos6.5 jdk-8u121-linux-x64.tar.gz elasticsearch-5.2.2.tar.gz 2. 配置(1). 配置静态ip (2). 进入cd /usr/local/src 在src目录下创建文件…

elasticSearch5.x与mysql数据库同步

ElasticSearch安装就不说了上一篇有说! 安装logstash 官方:https://www.elastic.co/guide/en/logstash/current/installing-logstash.html 1.下载公共密钥rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch2.添加yum源vim /etc/yum.rep…

JZOJ5776. 【NOIP2008模拟】小x游世界树

题目&#xff1a;【NOIP2008模拟】小x游世界树&#xff1b; 题目的附加题解给的很清楚&#xff0c;这里只给一个代码&#xff1b; 1 #include<iostream>2 #include<cstdio>3 #include<cstring>4 #include<cmath>5 #include<algorithm>6 #define…

elasticsearch解决同步删除数据库中不存在的数据

摘要: jdbc-input-plugin 只能实现数据库的追加&#xff0c;对于 elasticsearch 增量写入&#xff0c;但经常jdbc源一端的数据库可能会做数据库删除或者更新操作。这样一来数据库与搜索引擎的数据库就出现了不对称的情况。当然你如果有开发团队可以写程序在删除或者更新的时候同…

今天读了JDK1.8源码,知道了并行迭代器Spliterator

在JDK1.8的ArrayList里面偶然看到了这个内部类&#xff0c;同时对比了1.7的版本&#xff0c;发现1.7并没有这后面的东西&#xff0c; 随着好奇心&#xff0c;就搜了一下下&#xff0c;发现很有意思~ 也查了一些资料&#xff0c;如下总结&#xff1a; Spliterator是什么&#…

牛客网挑战赛24 青蛙(BFS)

链接&#xff1a;https://www.nowcoder.com/acm/contest/157/E来源&#xff1a;牛客网 有一只可爱的老青蛙&#xff0c;在路的另一端发现了一个黑的东西&#xff0c;想过去一探究竟。于是便开始踏上了旅途 一直这个小路上有很多的隧道&#xff0c;从隧道的a进入&#xff0c;会从…

20.pipe

pipe相当于angular1里面的filter 做一些格式转换啊&#xff0c;或者从一个数组里面选取一个元素等等 只要你愿意可以定义很复杂的内容‘’ 我们先看看 angular2 里面自带的一些pipe 我们去我们的week3 下的problem-list下 我们到html里面 之前是这样的 之后是这样的 我们再写三…

Redis内部数据结构-跳跃表

今天学习了跳跃表&#xff0c;记录一下下~ 一、跳跃表简介 跳跃表是一种随机化数据结构&#xff0c;基于并联的链表&#xff0c;其效率可以比拟平衡二叉树&#xff0c;查找、删除、插入等操作都可以在对数期望时间内完成&#xff0c;对比平衡树&#xff0c;跳跃表的实现要简…

Mybatis源码学习笔记

Mybatis核心概念: Configuration : 管理 mysql-config.xml 全局配置关系类 SqlSessionFactory: Session 管理工厂接口 Session: SqlSession 是一个面向用户&#xff08;程序员&#xff09;的接口。SqlSession 中提供了很多操作数据库的方法 Executor : 执行器是一个接口…

JQData数据提取及MySQL简单操作——基于Python

JQData平台真的挺不错&#xff0c;平台数据可以免费使用一年&#xff0c;满足绝大多数人需求&#xff0c;具体账号获取请自行百度哟~ 因需要高频数据而Wind也只给近三年&#xff0c;再要还得购&#xff0c;&#xff0c;机缘遇到这一平台&#xff0c;获得了账号试用很不错&#…

JVM模型学习笔记

JVM由三个主要的子系统构成 1. 运行时数据区&#xff08;内存结构&#xff09;: 运行时数据区也是JVM的核心部分 内存数据区又分&#xff1a;堆、java栈、本地方法栈、程序计数器、方法区 1.1 本地方法栈(线程私有)&#xff1a; 登记native方法&#xff0c;在Execution Eng…