假设我有一个班级:
import copy
class TestClass:
def __init__(self, value):
if isinstance(value, TestClass):
self = value.deepcopy()
else:
self.data = value
def deepcopy(self):
return copy.deepcopy(self)
我想编写代码,以便如果一个类的实例由同一个类的另一个实例初始化,它将生成第二个类的deepcopy
。
现在,如果我尝试
In []: x = TestClass(3)
In []: x.data
Out[]: 3
但如果我尝试
In []: y = TestClass(x)
Out[]: y.data
...
AttributeError: 'TestClass' object has no attribute 'data'
实例deepcopy
传递给x
时,为什么y
没有发生?
答案 0 :(得分:7)
解决方案:
import copy
class TestClass:
def __init__(self, value):
if isinstance(value, TestClass):
self.__dict__ = copy.deepcopy(value.__dict__)
else:
self.data = value
这使您的示例正常工作。你想做一个复制构造函数',
在Python对象中有一个包含所有的__dict__
属性
成员,这样您就可以从原始对象复制字典
并将其分配给新对象__dict__
。