Приоритетная очередь с пользовательским классом типов получает TypeError («>» не поддерживается между экземплярами «PrioritizedItem» и «int» »,)? - PullRequest
0 голосов
/ 07 февраля 2019

Я делаю A * поиск и мне нужно хранить информацию в приоритетной очереди.Но я хочу, чтобы приоритетная очередь сравнивала только одно поле моих данных.Поэтому я разработал класс PrioritizedItem для априорной очереди.Тем не менее, моя программа работает вечно.Я написал некоторый простой тестовый код для воспроизведения этой ошибки:

from dataclasses import dataclass,field
import queue

@dataclass(order=True)
class PrioritizedItem:
    hint: float
    current: tuple=field(compare=False)
    path: list=field(compare= False)
trace=[(0, 0)]
temp=PrioritizedItem(hint=14, current=(0, 0) ,path=trace) 
priori_queue = queue.PriorityQueue(temp ) #queue contains current location
priori_queue

enter image description here

После инициализации моя очередь приоритетов prior_queue по-прежнему пуста.Вручную добавить элемент temp даже выдает ошибку TypeError («'>» не поддерживается между экземплярами «PrioritizedItem» и «int» »,).Похоже, в моем классе PriortizedItem отсутствует какая-то часть.Как добавить эту часть?

1 Ответ

0 голосов
/ 08 февраля 2019

Вы передаете temp в PriorityQueue(temp), но единственный аргумент PriorityQueue - это maxsize, который должен быть целым числом.По умолчанию 0, что означает, что очередь увеличивается без ограничения размера.

priori_queue = queue.PriorityQueue()
priori_queue.put(temp)
...