【发布时间】:2020-12-04 14:25:32
【问题描述】:
我正在尝试实现类似于如果x 是一个列表,那么y = list(x) 应该是x 的深层副本。
到目前为止,我有以下类代码:
from copy import deepcopy
class CustomClass:
def __init__(self, foo):
if isinstance(foo, CustomClass):
self = deepcopy(foo)
else:
self._foo = foo
现在如果我跑
A = CustomClass(bar)
B = CustomClass(A)
print(B._foo)
我收到错误AttributeError: 'CustomClass' object has no attribute '_foo'。我不确定这里出了什么问题。例如,如果我要在 if 语句中添加行 print(self._foo),我会看到 deepcopy 已成功分配给 self。有没有办法实现这个 deepcopy 功能?
【问题讨论】:
-
因为
B满足 if 语句if isinstance(foo, CustomClass)所以永远不会创建self._foo -
@coderoftheday 对不起,我不完全理解。我想我有点迷茫为什么
self = deepcopy(A)没有将属性A._foo复制到B。 -
但是
A是CustomClass的一个实例,那么为什么要创建self._foo -
分配给
self在函数外部绝对没有影响(在这种情况下,在函数内部绝对没有影响,因为它随后不使用self)。
标签: python python-3.x class deep-copy