假设我有一个类:
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'
当实例 x
被传递给 y
时,为什么 deepcopy
没有发生?
最佳答案
解决方案:
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__
。
关于python - 如何将自己分配给自己的另一个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29590189/