我有以下课程:
class MyClass:
def __init__(self, value1, value2):
self.value1 = value1
self.value2 = value2
def normalize(self):
self.value1 = 1
return self
normalize
方法的目标是确保复制MyClass的“旧”实例时,将属性value1
设置回1
。
例如:
myclassA = MyClass(15,25)
myclassB = myclassA.normalize()
print(myclassB.value1)
print(myclassB.value2)
>>1
>>25
这有效。但是,有没有一种方法可以没有单独的方法(在我的情况下为normalize()
)来达到相同的结果?每当从MyClass
类的另一个实例创建一个实例作为副本时,我是否可以自动进行此操作?
答案 0 :(得分:2)
最好使用__copy__
执行此操作:
class MyClass:
def __init__(self, value1, value2):
self.value1 = value1
self.value2 = value2
def __copy__(self):
return self.__class__(1, self.value2)
然后:
In [5]: from copy import copy
In [6]: myclassA = MyClass(15,25)
In [7]: myclassB = copy(myclassA)
In [15]: myclassA.value1
Out[15]: 15
In [16]: myclassB.value1
Out[16]: 1
In [17]: myclassA.value2
Out[17]: 25
In [18]: myclassB.value2
Out[18]: 25