不要让(1)和(2)混淆。通常,Python会尝试为缺少的方法提供合理的后备。(例如,定义
__getitem__以具有一个可迭代的类就足够了,但是也可以更有效地实现
__iter__。对于诸如
__add__,带有可选
__iadd__等的 *** 作类似。)
__deepcopy__是
deepcopy()要寻找的最专业的方法,但是如果不存在,退回泡菜协议是明智的选择。它并没有真正调用
dumps()/
loads(),因为它不依赖中间表示形式为字符串,但是正如您所观察到的,它将间接使用
__getstate__and
__setstate__(via
__reduce__)。
目前,该文档仍然指出
…复制模块不使用copy_reg注册模块。
但这似乎是已修复的错误(可能是2.7分支在这里没有引起足够的重视)。
还要注意,这已经非常深入地集成到了Python中(至少现在是这样)。所述
object类本身实现
__reduce__(和它的版本化_ex变体),它是指
copy_reg.__newobj__用于产生给定的派生对象的类的新鲜实例。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)