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.
InformationsquelleAutor brain storm | 2013-11-25
Schreibe einen Kommentar