在Python类中实现克隆方法的正确惯用方式?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了在Python类中实现克隆方法的正确惯用方式?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1434字,纯文字阅读大概需要3分钟。
内容图文
![在Python类中实现克隆方法的正确惯用方式?](/upload/InfoBanner/zyjiaocheng/664/d224c3a8e4cf470b963aadfe9571ce38.jpg)
如何习惯地纠正Python中的实现克隆方法?看到:
def clone(self):
"""
Return a clone of this class
"""
克隆的原因-从使用角度构造相同的类实例,以便可以在不影响原始对象的情况下更改复制的内部状态.
具体来说:构造函数可以初始化私有类型,这些私有类型是原始类型或复杂类型:
def __init__(self, initial = None, width = DEFAULT_SIZE, height = DEFAULT_SIZE):
self._width = width
self._height = height
self._matrix = ...complex code, list of list...
使用原始类型-没什么困难.复杂类型该怎么办?
如果像tuple,set,dict这样的复杂类型是内置的,则有copy.copy / copy.deepcopy包,但是我不确定它的用法.
对于外部类的复杂类型,我不知道该怎么办.
(1)是否有任何帮助使复制变得容易的助手?还是约定,以便我可以继续讨论?
复制对象时,我没有理由使用提供的构造函数,因为我已经知道所有内部协定,并且能够私下操纵内部状态?
(2)如何在不使用构造函数的情况下实例化相同类型的对象?
更新我正在上“计算原理”课程,并实施了被教学材料隐藏的课程(出于计分的原因).
他们在提供的“接口”中使用克隆.我对Python类没有经验,所以请问正确的方法来处理这种情况.
解决方法:
实现__deepcopy __(和/或__copy__)以直接支持the copy module API,或者在copyreg中注册一个pickle-ing函数;如果未定义__deepcopy __,copy.deepcopy将使用copyreg注册的方法来实现深度复制.
请注意,许多Python类型(例如dict,list等)也提供了一个名为copy的方法,该方法执行浅表复制;通过将一个名称分配给另一种名称可以很容易地支持这两种习惯用法,例如:
class Foo:
def copy(self):
... do stuff to make a copy ...
return newcopy
__copy__ = copy # Now works with copy.copy too
内容总结
以上是互联网集市为您收集整理的在Python类中实现克隆方法的正确惯用方式?全部内容,希望文章能够帮你解决在Python类中实现克隆方法的正确惯用方式?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。