Я хочу хранить пары (prio,val)
разнородных типов в Python PriorityQueue.Здесь val
может быть либо строкой, либо объектом пользовательского класса.Когда prio
равны, реализация PriorityQueue (фактически heapq) сравнивает второй элемент, сравнивая таким образом строку и пользовательские объекты.
В зависимости от порядка хранения элементов, сравнивается либо:
- custom_object
- string
Случай 1. преобразуется в custom_object.__lt__(string)
, и это нормально, так как я могу перегрузить *Метод 1015 * в моем пользовательском классе.
Случай 2. Я застрял, потому что не знаю, как переопределить __lt__
для строк.
Ниже приведен MWE, который вставляет 3 элемента сравные приоритеты (значение 1).Его запуск приводит к сообщению об ошибке:
TypeError: '<' not supported between instances of 'str' and 'C'
import queue
class C:
def __init__(self,value):
__value__ = value
def __lt__(selfself,other):
return 0
q = queue.PriorityQueue()
tuple1=(1,"t1")
tuple2=(1,C("t2"))
tuple3=(1,"t3")
q.put(tuple1)
q.put(tuple2)
q.put(tuple3)
print( q.get())