我想将异类类型对(prio,val)
存储在python PriorityQueue中。这里的val
可以是字符串,也可以是自定义类对象。
当prio
等于时,PriorityQueue(实际上是heapq)实现开始比较第二个成员,从而比较字符串和自定义对象。
根据元素的存储顺序,可以进行以下任一比较:
案例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())
答案 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