如何在Python中以惯用方式正确实现clone
方法?请参见:
def clone(self):
"""
Return a clone of this class
"""
clone
的原因是为了从使用角度构造相同的类实例,因此可以更改副本的内部状态而不影响原始对象。具体来说:构造函数可能会初始化私有字段,这些字段可以是基本类型或复杂类型。
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) 我如何实例化相同类型的对象而不使用构造函数?
更新 我正在参加Coursera的计算原理课程,并实现了一些被教学内容隐藏的类(为了评分)。
他们在提供的"接口"中使用clone
。我对Python类没有经验,所以请问在这种情况下应该如何处理?
copy.deepcopy
允许用户定义的类覆盖复制操作或要复制的组件集。这个API应该由类来实现吗? - gavenkoa__copy__()
和__deepcopy__()
。 - Dan D.