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

标签 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'

当实例 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/

相关文章:

python - PySpark,调用saveAsTextFile时出错

python - 如何从句子中提取名词形容词对

python - 我以前从未见过 'class __proxy__',这是什么意思(我只见过像def __str__这样的)

python - odoo 12. 我无法对 Many2one 字段进行动态过滤

python - 创建指向同一 PowerPoint 文档中其他幻灯片的超链接

python - 如何在 Python 中保留 CSV 文件中的引号?

python - 如何在代码迭代时追加到列表并保存列表(对于 twitch 聊天机器人)

html - 安装 HTML : AttributeError: 'str' object has no attribute 'decode'

python - 在 Python 中求解 x 的高度非线性方程

python - 对 geopandas 中相交/重叠的几何图形进行分组和组合