如何将self分配给自己的另一个实例

时间:2015-04-12 13:52:14

标签: python python-3.x

假设我有一个班级:

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没有发生?

1 个答案:

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