复制对象时的调用方法

时间:2019-04-18 08:29:51

标签: python python-3.x class oop

我有以下课程:

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类的另一个实例创建一个实例作为副本时,我是否可以自动进行此操作?

1 个答案:

答案 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