为什么在复制自定义对象时,深拷贝会出现 "KeyError: '__deepcopy__'" 的错误?
为什么在复制自定义对象时,深拷贝会出现 "KeyError: '__deepcopy__'" 的错误?
我有一个类,可以将字典转换为对象,代码如下:
class Dict2obj(dict): __getattr__= dict.__getitem__ def __init__(self, d): self.update(**dict((k, self.parse(v)) for k, v in d.iteritems())) @classmethod def parse(cls, v): if isinstance(v, dict): return cls(v) elif isinstance(v, list): return [cls.parse(i) for i in v] else: return v
当我尝试对该对象进行深拷贝时,出现了以下错误:
import copy my_object = Dict2obj(json_data) copy_object = copy.deepcopy(my_object) File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/copy.py", line 172, in deepcopy copier = getattr(x, "__deepcopy__", None) KeyError: '__deepcopy__'
但是,如果我在Dict2obj
类中重写__getattr__
函数,我就能够执行深拷贝操作。请参考以下示例:
class Dict2obj(dict): __getattr__= dict.__getitem__ def __init__(self, d): self.update(**dict((k, self.parse(v)) for k, v in d.iteritems())) def __getattr__(self, key): if key in self: return self[key] raise AttributeError @classmethod def parse(cls, v): if isinstance(v, dict): return cls(v) elif isinstance(v, list): return [cls.parse(i) for i in v] else: return v
为什么我需要重写__getattr__
方法才能对该类返回的对象进行深拷贝?