mit __deepcopy__ auf benutzerdefinierte Objekt in python?
Bin ich ein schreiben einer benutzerdefinierten Queue
Klasse, die verwendet list
als ein zusammengesetztes Attribut. Ich weiß nicht Unterklasse von Liste. mein code ist hier. Ich bekomme die Fehlermeldung für deepcopy, die ich unten eingefügt. kann mir jemand helfen was ich mache ich falsch? Dank
from iterator import Iterator
class Abstractstruc(object):
def __init__(self):
assert False
def __str__(self):
return "<%s: %s>" %(self.__class__.__name__,self.container)
class Queue(Abstractstruc,Iterator):
def __init__(self,value=[]):
self.container=[]
self.size=0
self.concat(value)
def add(self, data):
self.container.append(data)
def remove(self):
self.container.pop(0)
def peek(self):
return self.container[0]
def __getitem__(self,index):
return self.container[index]
def __iter__(self):
return Iterator(self.container)
def concat(self,value):
for i in value:
self.add(i)
def __bool__(self):
return len(self.container)>0
def __len__(self):
return len(self.container)
def __deepcopy__(self,memo):
return Queue(copy.deepcopy(self.container,memo))
if __name__=='__main__':
q3=Queue()
li=[1,2,3]
q3.add(li)
print q3
print len(q3)
q4=copy.deepcopy(q3)
q3.peek()[0]=100
print "after modifying"
print q3
print "q4 = ", q4
Ausgabe:
<Queue: [[1, 2, 3]]>
1
Traceback (most recent call last):
File "test.py", line 56, in <module>
q4=copy.deepcopy(q3)
NameError: name 'copy' is not defined
- In der Zukunft, sorgen Sie bitte mit einer lauffähigen Beispiel. Insbesondere, ohne zu wissen, was Ihre
iterator.Iterator
Klasse hat, kann es nicht möglich sein, den code Debuggen. (In diesem Fall war es nicht notwendig, aber im Allgemeinen, es wird.) Siehe SSCCE oder der Hilfe/faq auf dieser Seite für weitere Informationen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie es importieren
copy
- Modul:Die Fehlermeldung:
NameError
wird ausgelöst, wenn Python nicht weiß, was die bloßen Namencopy
verweist.