【发布时间】:2015-04-12 13:52:13
【问题描述】:
假设我有一堂课:
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 没有发生?
【问题讨论】:
-
所以,本质上,我不能只将 self 分配给另一个实例,而是需要将另一个实例的每个属性复制到当前实例?
-
或者你可以创建一个不是构造函数但返回一个TestClass对象的函数。
-
当您执行
self = ...时,您不会用复制的对象替换当前对象,而是让变量self引用复制的对象。 -
在 Python 中,您通常会说
y = x.copy()而不是y = TestClass(x)。
标签: python python-3.x