python类与对象-如何让类支持比较操作

Posted marton

tags:

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

如何让类支持比较操作

问题举例

有时我们希望自定义类的实例间可以使用<, <=, >, >=, ==, !=符号进行比较,我们自定义比较的行为。

比如,有一个矩形,比较两个矩形的实例时,我们希望比较的是面积。

比如,有一个矩形和一个圆形,我们希望比较一个矩形实例和一个圆形实例,

我们希望它们比较的是面积。

 

解决思路

(1)比较运算符重载,需要实现以下方法

__lt__, __le__, __gt__, __ge__, __eq__, __ne__

(2)使用标准库functions下的装饰器,total_ordering可以简化此过程。

 

代码

from functools import total_ordering

from abc import ABCMeta, abstractclassmethod

@total_ordering
class Shape(metaclass=ABCMeta):
    @abstractclassmethod
    def area(self):
        pass

    def __lt__(self, obj):
        print(__lt__, self, obj)
        return self.area() < obj.area()

    def __eq__(self, obj):
        return self.area() == obj.area()

class Rect(Shape):
    def __init__(self, w, h):
        self.w = w
        self.h = h

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

    def __str__(self):
        return Rect:(%s, %s) % (self.w, self.h)

import math
class Circle(Shape):
    def __init__(self, r):
        self.r = r

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


rect1 = Rect(6, 9) # 54
rect2 = Rect(7, 8) # 56
c = Circle(8)

print(rect1 < c)
print(c > rect2)

 

参考资料:python3实用编程技巧进阶

以上是关于python类与对象-如何让类支持比较操作的主要内容,如果未能解决你的问题,请参考以下文章

7-5 如何让类支持比较操作

JAVA学习第七天——面向对象

Java面向对象

Java面向对象—— 继承

Java学习面向对象之继承

继 承(面向对象特征之二)