码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2019-05-02 00:14:25      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:实例   obj   port   html   ini   https   mooc   sha   ret   

如何让类支持比较操作

问题举例

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

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

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

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

 

解决思路

(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类与对象-如何让类支持比较操作

标签:实例   obj   port   html   ini   https   mooc   sha   ret   

原文地址:https://www.cnblogs.com/marton/p/10793247.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!