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类与对象-如何让类支持比较操作的主要内容,如果未能解决你的问题,请参考以下文章