python - 复制对象时调用方法

标签 python python-3.x class oop

我有以下类(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/

相关文章:

python - 如何从数据框列值创建单独的子字符串列

c# - 只读的属性,但只能在类之外

java - 我如何从java中的类调用另一个类

python - 如何使用 AES-256-CCM 在 php 中通过 python 解密加密文本

python - Matplotlib xtick 给出 "The truth value of an array with more than one element is ambiguous"

python - 在没有线程的情况下从另一个文件调用 Scrapy

python-3.x - 名称错误 : name 'sess' is not defined

python - Pandas 在高于 0.21.0 的版本上使用 fillna() 和 sum() 返回不同的结果

python - AWS 胶水 : Failed to start job run due to missing metadata

java - 基于内部映射的通用返回类型?