小编wou*_*lee的帖子

将自定义(深层)复制逻辑添加到python类的正确方法

我正在实现一个提供一些嵌套数据结构的python类.我希望添加对复制copy.copy()和深度复制的支持copy.deepcopy(),正如复制模块描述的文档所涉及的那样,它涉及编写__copy__()__deepcopy__特殊方法.

我知道如何教我的班级自己复制,但我想避免__init__()在新实例上进行,因为__init__()我的复制逻辑不需要(或不需要)做一些事情.

我最终得到的是这种方法,它按预期工作:

def __copy__(self):
    cls = type(self)
    obj = cls.__new__(cls)
    # custom copying logic that populates obj goes here
    return obj
Run Code Online (Sandbox Code Playgroud)

我的问题是:是否正在cls.__new__(cls)__copy__()想要跳过__init__()副本的实现调用正确的方法?还是有一种我忽略的"pythonic"方法?

python

11
推荐指数
1
解决办法
365
查看次数

标签 统计

python ×1