Wednesday, December 17, 2014

[Python] Class间大小比较(达到全序)

在Python 2.x中, 可以方便的使用 __cmp__ 方法来实现class object之间的大小比较.
class Foo:
    def __init__(self, key):
        self.key = key

    def __cmp__(self, other):
        return cmp(self.key, other.key)
如此Foo类型的object间的大小比较就可以用key这个域的值来实现.

在Python 3以后, __cmp__ 方法被移除了. 实现Foo object间的大小比较, 需要用functools.total_ordering修饰这个class以后, 实现__eq__方法以及__lt__(或者__lt__, __le__, __gt__, __ge__中的任意一个).
import functools

@functools.total_ordering
class Foo:
    def __init__(self, key):
        self.key = key

    def __eq__(self, other):
        return self.key == other.key

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