Приоритетная очередь с пользовательским классом типа получает TypeError(">" не поддерживается между экземплярами "PrioritizedItem" и "int" ",)?

Я делаю 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

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

1 ответ

Решение

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

priori_queue = queue.PriorityQueue()
priori_queue.put(temp)
Другие вопросы по тегам