को कॉपी जब मैं वस्तु की एक गहरी प्रतिलिपि मैं यह त्रुटि आई बनाने की कोशिश मैं एक वर्ग है जो इसदीप कॉपी विफलता जब कस्टम वस्तु
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__'
लेकिन मैं getatrDict2obj
कक्षा में फ़ंक्शन ओवरराइड करता हूं, मैं गहरी प्रतिलिपि ऑपरेशन करने में सक्षम था। क्योंकि copy.deepcopy
की कोशिश करता getattr(x, "__deepcopy__", None)
कॉल करने के लिए नीचे दिए गए
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
क्यों मैं आदेश वस्तुओं की एक deepcopy करने के लिए getattr विधि ओवरराइड करने के लिए की जरूरत है उदाहरण देखें इस वर्ग