实现类的比较操作

Posted miss_林

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实现类的比较操作相关的知识,希望对你有一定的参考价值。

类之间的实例可以用<,<=,>,>=,==,!=的运算符进行比较。可以对比较运算符重载,实现__lt__,__le,__gt__,__ge__,__eq__,__ne__这些方式。全部使用以上方法,会很复杂和多余。这里使用了functools库中的total_ordering装饰器简化代码。例如下:代码是实现了矩形与圆形面积的比较

from abc import abstractmethod
from functools import total_ordering
from math import pi

@total_ordering
class Shape(object):

    @abstractmethod
    def area(self): #抽象方法
        pass

    def __lt__(self, other):
        print \'in__lt__\'
        if not isinstance(other, Shape):
            raise TypeError(\'other is not Shape\')
        return self.area() < other.area()

    def __eq__(self, other):
        print \'in__eq__\'
        if not isinstance(other, Shape):
            raise TypeError(\'other is not Shape\')
        return self.area() == other.area()
    
\'\'\'矩形面积\'\'\'
class Rectangle(Shape):
    def __init__(self, w, h):
        self.w = w
        self.h = h

    def area(self):
        return self.w * self.h

\'\'\'圆形面积\'\'\'
class Cirle(Shape):

    def __init__(self, r):
        self.r = r

    def area(self):
        return self.r ** 2 * pi

r = Rectangle(4, 5)
c = Cirle(2)

\'\'\'对矩形面积与圆形面积的比较\'\'\'
print r < c
print \'-\'*20
print r <= c
print \'-\'*20
print r == c
print \'-\'*20
print r >= c
print \'-\'*20
print r > c

运行结果:

 

以上是关于实现类的比较操作的主要内容,如果未能解决你的问题,请参考以下文章

java 代码片段

有条件地导入 python 类的片段

刷新片段内的视图

比较有用的php代码片段

无法在片段内查看接收短信

Objective-C Block与函数指针比较