python 7-5 如何让类支持比较操作lt/le/total_ordering可以简化此过程,实现lt eq 后,可以推测出<= >=方法
来源:互联网 发布:淘宝直播卖什么最好卖 编辑:程序博客网 时间:2024/05/22 02:14
python 7-5 如何让类支持比较操作
解决方案
第一种方案实现如下方案
比较符号运算符重载,要实现以下方法
lt
le
gt
ge
eq
ne
第二种方案
使用标准库中的functools下的类装饰器total_ordering可以简化此过程,
实现lt eq 后,total_ordering可以推测出<= >=方法
def lt(self,rect):
return self.area() < rect.area()
def __eq__(self,rect): return self.area() == rect.area()
为了可以比较不同对象,我们可以将不同对象都继承一个类,在类中给出一个抽象函数,让需要参与的比较对象实现
解决方案1:
class Rectangle(object): def __init__(self,w,h): self.w = w self.h = h def area(self): return self.w * self.h def __lt__(self,rect): if self.area() < rect.area(): return True else: return False def __le__(self,rect): if self.area() <= rect.area(): return True else: return False def __gt__(self,rect): if self.area() > rect.area(): return True else: return False def __eq__(self,rect): if self.area() == rect.area(): return True else: return False def __ne__(self,rect): if self.area() != rect.area(): return True else: return Falserect1 = Rectangle(1.0,2.0)rect2 = Rectangle(1.0,1.0)print rect1 < rect2
解决方案2:
from functools import total_ordering@total_orderingclass Rectangle2(object): def __init__(self,w,h): self.w = w self.h = h def area(self): return self.w * self.h def __lt__(self,rect): return self.area() < rect.area() def __eq__(self,rect): return self.area() == rect.area()rect1 = Rectangle(1.0,2.0)rect2 = Rectangle(1.0,1.0)print rect1 >= rect2from abc import ABCMeta,abstractmethodclass Shape(object): @abstractmethod def area(self): pass def __lt__(self,obj): if not isinstance(obj,Shape): return TypeError('obj is not Shape') return self.area() < obj.area() def __eq__(self,obj): if not isinstance(obj,Shape): return TypeError('obj is not Shape') return self.area() == obj.area()class Rentangle3(Shape): def __init__(self,w,h): self.w = w self.h = h def area(self): return self.w * self.hclass Circle(Shape): def __init__(self,r): self.r = r def area(self): from math import pi return self.r**2*pir1=Rentangle3(2,2)c1=Circle(3)print r1 > c1
0 0
- python 7-5 如何让类支持比较操作lt/le/total_ordering可以简化此过程,实现lt eq 后,可以推测出<= >=方法
- 学习笔记:shell 中 [-eq] [-ne] [-gt] [-lt] [ge] [le]
- -eq、-ne、-gt、-ge、-lt、-le英文意思
- SHELL命令里面的EQ.NE.GT.LT.GE.LE
- lt、le、eq、ne、ge、gt的含义
- shell 中 [-eq] [-ne] [-gt] [-lt] [ge] [le]
- <c:if test="value ne, eq, lt, gt,...."> 用法
- <c:if test="value ne, eq, lt, gt,...."> 用法
- <c:if test="value ne, eq, lt, gt,...."> 用法
- <c:if test="value ne, eq, lt, gt,...."> 用法
- <c:if test="value ne, eq, lt, gt,...."> 用法
- <c:if test="value ne, eq, lt, gt,...."> 用法
- 简单实现可以多选的ProductListDialog<T>
- jQuery :eq,lt,gt
- eq lq lt
- DOS命令里面的EQ、NE、GT、LT、GE、LE分别是什么意思
- SHELL命令里面的EQ、NE、GT、LT、GE、LE分别是什么意思
- DOS命令里面的EQ、NE、GT、LT、GE、LE分别是什么意思
- 测试shiro的quickstart
- SpringBoot 整合Ehcache3
- 比较系统的在线学习网站
- 我为什么选择七牛云存储
- 七牛云存储九折优惠码
- python 7-5 如何让类支持比较操作lt/le/total_ordering可以简化此过程,实现lt eq 后,可以推测出<= >=方法
- 机器学习面试准备之二、优化方法
- 【Leetcode】204. Count Primes
- Nutz | Nutz项目整合Spring实战
- 10.4.2
- EntityFramework Core 1.1有哪些新特性呢?我们需要知道_0
- Linux 文件/文件夹 权限小札
- 非常可乐(HDU-1495)
- JDBC基础-事务管理