Я пытаюсь реализовать приоритетную очередь в Python. Я следую example, который я нашел в Интернете. Класс Skill
переопределяет метод __cmp__
, так что очередь приоритетов может сама заказывать. Я получаю сообщение об ошибке, когда я бегу:Приоритетная очередь не распознает функцию __cmp__ в Python
TypeError: unorderable types: Skill() < Skill()
я нашел несколько примеров в Интернете, которые говорят, до тех пор, как вы перегрузить метод __cmp__()
очередь приоритет должен быть хорошим.
try:
import Queue as Q # ver. < 3.0
except ImportError:
import queue as Q
class Skill(object):
def __init__(self, priority, description):
self.priority = priority
self.description = description
print ('New Level:', description)
return
def __cmp__(self, other):
return cmp(self.priority, other.priority)
q = Q.PriorityQueue()
q.put(Skill(5, 'Proficient'))
q.put(Skill(10, 'Expert'))
q.put(Skill(1, 'Novice'))
while not q.empty():
next_level = q.get()
print ('Processing level:', next_level.description)
В данный момент я использую Python 3.4.1 на своем компьютере.
Это ваш фактический отступ? Также обратите внимание, что '__cmp__' игнорируется в 3.x и заменяется богатым сравнением: https://docs.python.org/3/reference/datamodel.html#object.__lt__. См. http://stackoverflow.com/q/8276983/3001761 – jonrsharpe
Это мой фактический отступ. Я новичок в Python, это еще один отступ? Поэтому я должен использовать богатое сравнение, а не cmp? – morganw09dev
Отступы имеют решающее значение для Python, код, который вы опубликовали, не будет работать. Да, вы должны использовать богатые методы сравнения, если вы пишете для 3.x. – jonrsharpe