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

博客围绕如何让类支持比较操作展开。以矩形、圆形实例比较面积为例,提出解决思路:一是进行比较运算符重载,实现__lt__等方法;二是使用标准库functions下的装饰器total_ordering简化过程,还给出了参考资料。

如何让类支持比较操作

问题举例

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

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

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

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

 

解决思路

(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实用编程技巧进阶

转载于:https://www.cnblogs.com/marton/p/10793247.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值