news 2026/6/10 14:22:53

Python 原型模式

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python 原型模式

Python 中的原型模式(Prototype Pattern)

原型模式是一种创建型设计模式,其核心思想是:
用一个已存在的对象(原型)作为模板,通过复制(克隆)来创建新的对象,而不是通过new或构造函数重新创建。

适用场景

  • 创建对象代价高昂(需要大量初始化、IO、网络请求等)
  • 对象结构复杂,但大部分属性相似,只需微调
  • 希望避免显式构造函数参数爆炸
  • 需要快速生成大量相似对象(如游戏中的怪物、UI 组件、报表模板等)
原型模式的优点
  • 隐藏创建细节,客户端只需调用clone()
  • 性能好:复制比重新构建快得多
  • 方便扩展:只需克隆再修改
Python 中的实现方式

Python 提供了非常方便的内置支持:
copy模块中的copy()(浅拷贝)和deepcopy()(深拷贝),以及__copy____deepcopy__钩子。

1. 最简单的原型模式:使用copy.deepcopy()
importcopyclassPrototype:def__init__(self,name,age,skills):self.name=name self.age=age self.skills=skills# 列表,深拷贝时会复制defclone(self):returncopy.deepcopy(self)def__str__(self):returnf"{self.name}({self.age}), skills:{self.skills}"# 使用if__name__=="__main__":original=Prototype("Alice",28,["Python","Java","SQL"])clone1=original.clone()clone1.name="Bob"clone1.age=30clone1.skills.append("Go")clone2=original.clone()clone2.name="Charlie"print("Original:",original)print("Clone1: ",clone1)print("Clone2: ",clone2)

输出

Original: Alice (28), skills: ['Python', 'Java', 'SQL'] Clone1: Bob (30), skills: ['Python', 'Java', 'SQL', 'Go'] Clone2: Charlie (28), skills: ['Python', 'Java', 'SQL']
2. 更优雅的方式:自定义__copy____deepcopy__
importcopyclassEmployee:def__init__(self,name,department,projects):self.name=name self.department=department self.projects=projects# 列表def__copy__(self):# 浅拷贝:只复制对象本身,列表引用共享new=self.__class__.__new__(self.__class__)new.__dict__.update(self.__dict__)returnnewdef__deepcopy__(self,memo=None):# 深拷贝:递归复制所有可变对象new=self.__class__.__new__(self.__class__)new.__dict__.update({'name':self.name,'department':self.department,'projects':copy.deepcopy(self.projects,memo)})returnnewdefclone(self,deep=False):returncopy.deepcopy(self)ifdeepelsecopy.copy(self)def__str__(self):returnf"{self.name}in{self.department}, projects:{self.projects}"# 测试emp=Employee("Alice","Engineering",["Project A","Project B"])# 浅拷贝emp_shallow=emp.clone(deep=False)emp_shallow.name="Bob"emp_shallow.projects.append("Project C")print("Original:",emp)print("Shallow clone:",emp_shallow)# projects 列表是共享的# 深拷贝emp_deep=emp.clone(deep=True)emp_deep.name="Charlie"emp_deep.projects.append("Project D")print("Original (unchanged):",emp)print("Deep clone:",emp_deep)

输出

Original: Alice in Engineering, projects: ['Project A', 'Project B', 'Project C'] Shallow clone: Bob in Engineering, projects: ['Project A', 'Project B', 'Project C'] Original (unchanged): Alice in Engineering, projects: ['Project A', 'Project B', 'Project C'] Deep clone: Charlie in Engineering, projects: ['Project A', 'Project B', 'Project D']
3. 原型管理器(Prototype Registry)—— 注册原型并按名称克隆
importcopyclassPrototypeRegistry:def__init__(self):self._prototypes={}defregister(self,name,prototype):self._prototypes[name]=prototypedefunregister(self,name):delself._prototypes[name]defclone(self,name,**attrs):prototype=self._prototypes[name]clone=copy.deepcopy(prototype)clone.__dict__.update(attrs)# 覆盖或添加属性returnclone# 使用if__name__=="__main__":registry=PrototypeRegistry()# 注册几种模板registry.register("basic_car",Car("Basic Car","Sedan","Red",100000))registry.register("sports_car",Car("Sports Car","Coupe","Black",300000))# 克隆并修改car1=registry.clone("basic_car",color="Blue",price=120000)car2=registry.clone("sports_car",name="Ferrari",color="Yellow",price=500000)print(car1)print(car2)
原型模式 vs 其他创建型模式对比
模式适用场景是否需要构造函数
工厂方法根据类型创建不同对象
抽象工厂创建一组相关对象
建造者复杂对象一步步构建否(链式)
原型复制已有对象(尤其是初始化代价高)否(直接 clone)
Python 中的实际推荐
  • 大多数情况下,直接用copy.deepcopy()就够了。
  • 需要控制浅/深拷贝行为时,自定义__copy____deepcopy__
  • 需要管理多种模板时,使用原型注册器(Registry)。
真实项目中的例子
  • 游戏开发:克隆怪物、技能、物品
  • 报表系统:克隆报表模板,再修改标题、字段
  • 图形编辑器:复制图形对象
  • 机器学习:复制模型配置,再微调

如果你想看更复杂的例子(如游戏角色原型、图形对象克隆、结合其他模式的实现),随时告诉我!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 12:15:47

Open-AutoGLM源码逆向工程全记录(仅限内部交流资料泄露)

第一章:Open-AutoGLM源码逆向工程全记录(仅限内部交流资料泄露)逆向分析前的环境准备 在开始对 Open-AutoGLM 项目进行深度逆向前,需确保本地具备完整的 Python 开发环境与反编译工具链。该项目采用 PyInstaller 打包,…

作者头像 李华
网站建设 2026/6/9 16:43:45

Path of Building中文版:新手到高手的角色构建完全指南

还在为《流放之路》复杂的天赋树和装备系统头疼吗?🎮 面对游戏中数百个天赋节点和五花八门的装备组合,如何规划出既强大又符合个人风格的角色构建?PoeCharm作为Path of Building的官方中文版本,正是专为游戏构建工具、…

作者头像 李华
网站建设 2026/5/30 13:12:56

Dify平台在农业科技信息传播中的普及价值

Dify平台在农业科技信息传播中的普及价值 在广袤的农田里,一位老农蹲在地头,望着发黄的小麦叶片皱起眉头。他掏出手机,用方言语音输入:“这麦子叶子咋变黄了?”几秒钟后,一个简洁清晰的回答跳了出来&#x…

作者头像 李华
网站建设 2026/6/10 6:13:28

MOS管栅极端口VGS过压保护器件选型与电路设计

栅极氧化层击穿是MOS管首要失效模式。当栅源电压VGS超过额定值(通常20V)时,厚度仅纳米级别的氧化层会永久性损坏。实际应用中,驱动电路异常、静电放电、开关瞬态振荡都可能导致VGS过压,必须在栅极端口部署可靠的保护器…

作者头像 李华
网站建设 2026/6/10 17:22:10

LiveSplit速度跑计时终极指南:从入门到精通的高效工具

LiveSplit速度跑计时终极指南:从入门到精通的高效工具 【免费下载链接】LiveSplit A sleek, highly customizable timer for speedrunners. 项目地址: https://gitcode.com/gh_mirrors/li/LiveSplit 在速度跑的世界里,每一秒都承载着突破的渴望。…

作者头像 李华
网站建设 2026/6/10 13:13:04

解锁高效创作:开源屏幕录制工具的5大核心功能揭秘

在数字化时代,开源屏幕录制工具已成为提升工作效率和内容创作质量的利器。Screenity作为一款功能强大的开源录屏软件,不仅完全免费,还提供了丰富的录制模式和实时标注功能,让视频制作变得简单高效。本文将通过全新的视角&#xff…

作者头像 李华