2016-07-30 38 views
0

Ich bin neu bei Python, also die Frage. Dies ist meine Implementierung einer QueueQueue-Implementierung in Python gibt Fehler bei der Größe

class Queue: 
    def __init__(self): 
     self.top = None 
     self.marker = None 
     self.size = 0 

    def push(self, item): 
     self.size += 1 
     curr = Node(item) 
     if self.top is None: 
      self.top = curr 
      self.marker = curr 
     else: 
      self.marker.next = curr 
      self.marker = curr 

    def pop(self): 
     if self.top is None: 
      raise Exception("Popping an empty queue") 
     curr = self.top 
     self.size -= 1 
     if self.top is self.marker: 
      self.top = None 
      self.marker = None 
     else: 
      self.top = self.top.next 
     return curr 

    def peek(self): 
     return self.top.value 

    def size(self): 
     return self.size 

    def isempty(self): 
     return self.size == 0 

Die Node-Klasse ist wie folgt definiert,

class Node: 
    def __init__(self, value=None, next=None): 
     self.value = value; 
     self.next = next 

Diese Implementierung funktioniert gut für die meisten Methoden, außer, wenn ich rufe Größe. Dieser Aufruf,

print(queue.size()) 

Ergebnisse in der folgenden Ausnahme,

print(queue.size()) 
TypeError: 'int' object is not callable 

Kann nicht scheinen, zu verstehen, was das Problem hier ist.

+0

Vielleicht ist das Problem, dass Sie den gleichen Namen, "Größe", für ein Integer-Attribut und für eine Methode verwenden. Versuchen Sie den Integer-Attributnamen (und alle Verweise darauf) auf etwas anderes zu ändern. –

Antwort

0

Sie gaben ein Attribut und eine Methode mit demselben Namen, Größe. Dies verwirrt die Namensauflösung (für Sie; der Interpreter hat seine Regeln fest an seinem Platz). Überprüfen Sie Ihre Namensauflösung Vorrang; Ich denke, Sie werden feststellen, dass das Attribut in diesem Fall Vorrang hat. Somit wird queue.size in eine ganze Zahl aufgelöst, keine Funktion.