python中使用运算符重载进行排序

2024-05-13 05:44:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我是新来的经营者超载,所以请容忍我。我有一个带有操作符重载__lt__的类,它应该打印列表的排序结果,但是我得到了错误'<' not supported between instances of 'Inventory' and 'Inventory'。为什么sort方法不能对列表的内容进行排序。我哪里出错了?感谢您的帮助。提前谢谢

class Inventory:
    def __init__(self, item, cost):
        self.item = item
        self.cost = cost
        
    def __str__(self):
        return "{:16s} ${:6.2f}".format(self.item, self.cost)

    def __lt__(self, other):
        return Inventory(self.cost < other.cost)

i1 = Inventory("Pentel Pen", 1.45)
i2 = Inventory("Ruler", .99)
i3 = Inventory("Calculus Text", 245.99)
i4 = Inventory("Diet Coke", 1.80)
t = [i1, i2, i3, i4]
t = [i1, i2, i3, i4]

for i in sorted(t):
    print(i)

Expected result:

Ruler            $  0.99
Pentel Pen       $  1.45
Diet Coke        $  1.80
Calculus Text    $245.99


Tags: ltself列表return排序defiteminventory
1条回答
网友
1楼 · 发布于 2024-05-13 05:44:33

将您的方法替换为:

def __lt__(self, other):
    return self.cost < other.cost

inventory1 < inventory2应返回TrueFalse以进行排序,而不是Inventory的实例

相关问题 更多 >