美文网首页
python让类支持比较操作

python让类支持比较操作

作者: udhga | 来源:发表于2019-01-22 23:01 被阅读6次
    传统方法

    自行定义__lt__、__le__、__gt__、__ge__、__eq__等方法,比较繁琐

    class Rectangle(object):
        def __init__(self, w, h):
            self.w = w
            self.h = h
    
        def area(self):
            return self.w * self.h
    
        def __lt__(self, obj):
            print('--lt--')
            return self.area() < obj.area()
    
        def __gt__(self, obj):
            print('---gt---')
            return self.area() >= obj.area()
    
    r1 = Rectangle(3, 5)
    r2 = Rectangle(4, 4)
    
    print(r1 < r2)  # --lt-- True
    print(r1 >= r2)  # False
    print(r1 <= r2)  # True
    
    使用标准库下的functools下的类装饰器total_ordering可以简化此过程

    只需要定义__eq__和其中一个(__lt__、__le__、__gt__、__ge__)即可,测试过,此方法也支持不同类之间的比较

    from functools import total_ordering
    @total_ordering
    class Rectangle(object):
        def __init__(self, w, h):
            self.w = w
            self.h = h
    
        def area(self):
            return self.w * self.h
    
        def __lt__(self, obj):
            print('--lt--')
            return self.area() < obj.area()
    
        def __eq__(self, obj):
            print('---gt---')
            return self.area() == obj.area()
    
    
    r1 = Rectangle(3, 5)
    r2 = Rectangle(4, 4)
    print(r1 > r2)  # --lt-- False
    print(r1 == r2)  # ---gt--- False
    print(r1 < r2)  # --lt--  True
    print(r1 >= r2)  # --lt-- False
    

    相关文章

      网友评论

          本文标题:python让类支持比较操作

          本文链接:https://www.haomeiwen.com/subject/ztzrjqtx.html