zoukankan      html  css  js  c++  java
  • python设计模式之原型模式

    python设计模式之原型模式

    ​ 对于原型模式而言,其中最主要的部分就是关于一个对象的复制,其中就包含两个方面:1、浅复制;2、深复制。具体的区别请看我相关的随笔。这里简略的说明一下,浅复制就等于对象的引用,也就是 b = object()这种,对于b的修改会影响到相关的对象;而深复制就相当于两个完全独立的东西,互不影响。

    ​ 所以说,原型模式就是帮助我们创建对象的克隆,方便对象的分享和使用。在python中,通过使用copy.deepcopy()函数来完成。

    ​ 代码实例如下:

    import copy
    class A:
    	def __init__(self):
    		self.x = 18
    		self.msg = 'Hello'
    class B(A):
    	def __init__(self):
    		A.__init__(self)
    		self.y = 34
    	def __str__(self):
    		return '{}, {}, {}'.format(self.x, self.msg, self.y)
    if __name__ == '__main__':
    	b = B()
    	c = copy.deepcopy(b)
    	print([str(i) for i in (b, c)])
    	print([i for i in (b, c)])
    

    结果如下

    >>> python3 clone.py
    ['18, Hello, 34', '18, Hello, 34']
    [<__main__.B object at 0x7f92dac33240>, <__main__.B object at 0x7f92dac33208>]
    

    ​ 输出表明通过copy.deepcopy()得到两个独立的副本。

    ​ 最后,可以使用copy.copy()函数进行浅复制。

    ​ 以下为官方文档的解释:

    • [ ] 浅复制构造了一个新的复合对象后,(会尽可能地)将在原始对象中找到的对象的引用插入到对对象中
    • [ ] 深复制构造一个新的复合对象后,会递归的将在原始对象中找到的对象的副本插入到新对象中
  • 相关阅读:
    promise的终止调用方法:
    (五)浅谈测试用例
    (四)一个bug的生命周期
    (三)趣谈软件需求分析
    (二)软件测试分类
    (一) 软件测试实质
    【转载—“光荣之路”公众号】Bug预防体系(上千bug分析后总结的最佳实践)
    <MFC>FILE的操作
    <CAN>测试的原理
    <C++>消息循环
  • 原文地址:https://www.cnblogs.com/JonnyJiang-zh/p/13195428.html
Copyright © 2011-2022 走看看