python两种不同的等式方法;一个正常的一个和一个用于分类

时间:2014-12-05 15:19:00

标签: python python-3.x comparison

我有一个对象,我希望能够在它查看所有对象数据的位置进行相等比较以进行比较。我还想基于对象的一个​​属性对对象进行排序。

以下是一个例子:

@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 < msg2not msg1 > msg2以及msg1 != msg2 ...可能不会混淆排序方法吗?

我想我可以在sorted上使用“key”参数,但由于我只有一种方法可以对这些对象进行排序,所以我想采用一种自动方式对它进行正确的排序

如果有一个__key__魔术操作符sorted调用,那就太好了。

0 个答案:

没有答案