【发布时间】:2019-04-18 08:29:51
【问题描述】:
我有以下课程:
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 类的另一个实例的副本时,我是否可以自动实现这一点?
【问题讨论】:
-
为什么要复制现有的实例?为什么不做一个新的?
-
你实际上并没有在这里“复制”,你知道的,对吧?
-
您实际上没有制作任何副本。
myclassA和myclassB都引用同一个对象,如果您检查myclassA.value1,您将看到1的值。 Python 不像 C++,隐式复制无处不在。特别是,赋值、参数传递和返回值都无需复制即可操作。见nedbatchelder.com/text/names.html -
如何创建副本?你的意思是
copy.copy? Python 没有“复制构造”的概念。
标签: python python-3.x class oop