8.24 让类支持比较操作

    Python类对每个比较操作都需要实现一个特殊方法来支持。例如为了支持>=操作符,你需要定义一个 方法。尽管定义一个方法没什么问题,但如果要你实现所有可能的比较方法那就有点烦人了。

    装饰器 functools.totalordering 就是用来简化这个处理的。使用它来装饰一个来,你只需定义一个 eq() 方法,外加其他方法(lt, le, gt, or _ge)中的一个即可。然后装饰器会自动为你填充其它比较方法。

    这里我们只是给House类定义了两个方法: 和 lt() ,它就能支持所有的比较操作:

    其实 totalordering 装饰器也没那么神秘。它就是定义了一个从每个比较支持方法到所有需要定义的其他方法的一个映射而已。比如你定义了 () 方法,那么它就被用来构建所有其他的需要定义的那些特殊方法。实际上就是在类里面像下面这样定义了一些特殊方法:

    原文: