我有一个对象,我希望能够在它查看所有对象数据的位置进行相等比较以进行比较。我还想基于对象的一个属性对对象进行排序。
以下是一个例子:
@total_ordering
class Msg():
def __init__(self, value="", timestamp=None):
self.value = value
self.timestamp = timestamp
def is_equal(self, other):
""" 2 messages are equal if they contain all the same values """
return (
self.value == other.value
and self.timestamp == other.timestamp
)
def __eq__(self, other):
return self.timestamp == other.timestamp
def __lt__(self, other):
return self.timestamp < other.timestamp
因此,通过此示例,我可以轻松地执行sorted(msgs)
并返回有序列表。但是,因为我正在使用__eq__
来处理排序,所以当我想测试所有属性是否相同时,我无法进行简单的msg1 == msg2
比较。但是,如果我更改__eq__
以处理相等的情况,我的排序是否会继续正常运行?在这种情况下,not msg1 < msg2
和not msg1 > msg2
以及msg1 != msg2
...可能不会混淆排序方法吗?
我想我可以在sorted
上使用“key”参数,但由于我只有一种方法可以对这些对象进行排序,所以我想采用一种自动方式对它进行正确的排序
如果有一个__key__
魔术操作符sorted
调用,那就太好了。