如何为PriorityQueue定义外部重载以管理异构类型元素?

时间:2019-04-15 13:58:33

标签: python-3.x overloading comparator

我想将异类类型对(prio,val)存储在python PriorityQueue中。这里的val可以是字符串,也可以是自定义类对象。 当prio等于时,PriorityQueue(实际上是heapq)实现开始比较第二个成员,从而比较字符串和自定义对象。

根据元素的存储顺序,可以进行以下任一比较:

  1. custom_object <字符串
  2. 字符串

案例1转换为custom_object.__lt__(string),这很好,因为我可以重载自定义类中的def __lt__:方法。

案例2:我被困住了,因为我不知道如何重新定义__lt__的字符串。

下面是一个MWE,它插入具有相同优先级(值1)的3个元素。 运行它会导致错误消息:

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 :(得分:0)

如果a不提供a < b的实现,则Python接下来将寻找b > a的实现。

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

c = C()

print(c < 'a')  # 0
print('a' < c)  # 1