Как определить внешнюю перегрузку для PriorityQueue для управления элементами разнородного типа? - PullRequest
0 голосов
/ 15 апреля 2019

Я хочу хранить пары (prio,val) разнородных типов в Python PriorityQueue.Здесь val может быть либо строкой, либо объектом пользовательского класса.Когда prio равны, реализация PriorityQueue (фактически heapq) сравнивает второй элемент, сравнивая таким образом строку и пользовательские объекты.

В зависимости от порядка хранения элементов, сравнивается либо:

  1. custom_object
  2. 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())

1 Ответ

0 голосов
/ 15 апреля 2019

Если a не предоставляет реализацию для a < b, то Python будет искать реализацию b > a next.

class C:
    def __lt__(self, other):
        return 0
    def __gt__(self, other):
        return 1

c = C()

print(c < 'a')  # 0
print('a' < c)  # 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...