के साथ ऑब्जेक्ट्स पर TypeError उठाता है, मैं एक प्रतीक प्रकार को कार्यान्वित करना चाहता हूं, जो हमारे पास पहले से मौजूद प्रतीकों का ट्रैक रखता है (_sym_table
में सहेजा गया), और यदि वे मौजूद हैं, या उन्हें बनाते हैं अन्यथा अन्यथा। कोड:copy.deepcopy स्वयं परिभाषित __new __() विधि
# -*- coding: utf-8 -*-
_sym_table = {}
class Symbol(object):
def __new__(cls, sym):
if sym not in _sym_table:
return super().__new__(cls)
else:
return _sym_table[sym]
def __init__(self, sym):
self.sym = sym
_sym_table[sym] = self
def __str__(self):
return self.sym
def __cmp__(self, other):
return self is other
def __hash__(self):
return self.sym.__hash__()
लेकिन जब मैं इस तरह के Symbol
उदाहरणों की एक सूची पर copy.deepcopy
कहते हैं, अपवाद उठाया है:
a = Symbol('a')
b = Symbol('b')
s = [a, b]
t = copy.deepcopy(s)
त्रुटि संदेश:
Traceback (most recent call last):
File "xxx.py", line 7, in <module>
t = copy.deepcopy(s)
File "/usr/lib/python3.2/copy.py", line 147, in deepcopy
y = copier(x, memo)
File "/usr/lib/python3.2/copy.py", line 209, in _deepcopy_list
y.append(deepcopy(a, memo))
File "/usr/lib/python3.2/copy.py", line 174, in deepcopy
y = _reconstruct(x, rv, 1, memo)
File "/usr/lib/python3.2/copy.py", line 285, in _reconstruct
y = callable(*args)
File "/usr/lib/python3.2/copyreg.py", line 88, in __newobj__
return cls.__new__(cls, *args)
TypeError: __new__() takes exactly 2 arguments (1 given)
तो मेरी प्रश्न हैं:
- एच क्या मैं इन वस्तुओं पर स्वयं परिभाषित
__new__
विधियों के साथ एक गहरी प्रतिलिपि बना सकता हूं? - और
copy.deepcopy
का उपयोग कब और कैसे करें के बारे में कोई सुझाव?
बहुत बहुत धन्यवाद!