我有以下类(class):
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
类的另一个实例的副本时,我可以自动执行此操作吗?
最佳答案
最好使用 __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
关于python - 复制对象时调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55742060/