2015-03-01 3 views
2

Я работаю над входом MTIx 6.00.1x в класс Computer Science, и у меня возникают проблемы с созданием методов класса. В частности, функция «remove» в моем классе «Queue» не возвращает значение, как я ожидал.Метод класса не возвращает значение

Вот контекст по запросу:

Для этого упражнения, вы будете кодирования свой первый класс, класс Queue. В классе очереди, вам потребуется три метода:

инициализации: инициализировать очереди (думаю: как будет хранить элементы очереди по Вам необходимо инициализировать соответствующий атрибут объекта в этом методе)

вставка: вставляет один элемент в очереди

удалить: удаляет (или «хлопки») один элемент из очереди и возвращает его. Если очередь пуста, возникает значение ValueError.

Я написал следующий код с методом «удалить», но хотя поведение метода корректно изменяет массив, он не возвращает «» выскочил значение:

class Queue(object): 

    def __init__(self): 
     self.vals = [] 

    def insert(self, value): 
     self.vals.append(value) 

    def remove(self): 
     try: 
      self.vals.pop(0) 
     except: 
      raise ValueError() 

Любая помощь был бы очень признателен!

+0

Чтобы избежать путаницы в будущем: «метод класса» в Python обычно означает [что-то другое] (http://stackoverflow.com/q/136097/1392132). Ваши функции - обычные атрибуты * *. – 5gon12eder

+0

Спасибо за разъяснение! Очень ценю это – joanx737

ответ

2

Ну, возвращаясь довольно легко в Python, так что просто сделать это:

def remove(self): 
    try: 
     return self.vals.pop(0) 
    except: 
     raise ValueError() 

К счастью, уже pop() удаляет и возвращает выбранный элемент одновременно.

+0

Спасибо за ответ!Моя путаница такова: say 'c' - это объект «Queue». не будет ли c.remove() эквивалентен вызову c.vals.pop (0), который, как ожидается, должен автоматически вернуть удаленное значение? – joanx737

+0

Нет, 'remove()' не удаляется по индексу, а по значению. – TidB

+0

Извините, я специально ссылался на собственный метод 'remove' класса 'queue' (который использует pop()) по сравнению с встроенным методом Python; если он вызывает pop(), почему это значение автоматически не возвращается? Благодаря! – joanx737

0

Для возврата значений необходимо использовать return. Обновите способ удалить до:

def remove(self): 
    try: 
     return self.vals.pop(0) 
    except: 
     raise ValueError 
0

Вы должны явно возвращать это значение:

return self.vals.pop() 

Отметим также, что:

  • аргумент list.pop() метод не является обязательным;
  • он также поднимет IndexError, поэтому вы должны поймать только это конкретное исключение вместо каждого исключения;
  • вы должны использовать exception chaining, если это возможно;
  • Ваш vals член является частным, поэтому rename it to start with an underscore;
  • вся задача несколько бессмысленна, поскольку в списках Python уже есть методы append() и pop() с точно требуемым поведением.
Смежные вопросы