2016-01-21 2 views
3

Я пытаюсь закодировать свой первый класс очереди. До сих пор у меня есть этот код, который seemes работать:Инициализация очереди в Python

class Queue(list): 
    def __init__(self): 
     self = [] 

    def insert(self, x): 
     self.append(x) 
     return self 

    def delete(self): 
     if len(self) == 0: 
      print "The queue is empty" 
     else: 
      self.remove(self[0]) 
      return self 

Однако, я был порекомендован переписать его, и когда я пытаюсь что-то вроде этого я получил неправильные результаты:

class Queue: 
    def __init__(self): 
     self.items = [] 

    def insert(self, x): 
     self.items.append(x) 

Тест:

queue = Queue() 
print queue 
queue.insert(5) 
print queue 

Got:

<__main__.Queue instance at 0x0000000002A2F148> 
<__main__.Queue instance at 0x0000000002A2F148> 

Не могли бы вы объяснить мне разницу между двумя подходами и почему вторая не работает (хотя я видел ее на многих сайтах)?

+1

Второй один работает, только override' __str__' или выполните 'print queue.items' – Andrey

+0

, как бы вы запускали свой первый метод и каков ожидаемый результат вашего второго метода. – The6thSense

+0

Ожидаемые выводы для тестов (см.« Тест »выше) равны соответственно [], [5]. Я получил его, используя первую версию кода и следуя рекомендациям __str__ (Спасибо!) Со второй версией кода. – Irina

ответ

1

Вам нужно нужно реализовать либо str или repr для вашего class Queue перед печатью

0

Внутри переписывания, вы можете вернуть значение вставки, и в призвании, присвоить его переменной:

queue = Queue() 
print queue #should show something like <__main__.Queue instance at 0x(some numbers here)> 
newQueue = queue.insert(5) 
print newQueue 

и внутри функции, изменяя его на что-то вроде:

def insert(self, x): 
    self.items.append(x) 
    return self.items 
Смежные вопросы