如何在Python中正確地修改clone
方法?參見:在Python類中實現克隆方法的正確慣用方式?
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)如何可以實例相同類型的對象,而無需使用構造?
UPDATE我正在計算 Coursera類原則和實施教的東西(對得分的原因)隱藏類。
它們在提供的「接口」中使用clone
。我沒有經驗的Python類,所以要求正確的方式來處理情況。
'copy.deepcopy' – kindall
@kindall官方文件說:'copy.deepcopy' *讓用戶定義的類重寫複製或該組件被複制*。該API應該由類實現? – gavenkoa
「爲了讓類定義自己的拷貝實現,它可以定義特殊的方法'__copy __()'和'__deepcopy __()'。」 –