目录
前言
这个total_ordering的用法其实没有什么太多可说的。倒是它的底层实现值得大家去看一下。
当我,我这里为了简单,还是只是介绍一下它的用法
total_ordering的用法
它的意义很简单,在我们定义类中,如我们需要定义__eq__、__lt__、__gt__等用于比较的魔法函数时,他们的逻辑其实都是很相似的。而我们去一一定义,其实代码重复量是比较大的。而total_ordering就是来解决这个问题的。
我们只需要定义了__eq__和__lt__或者__gt__,total_ordering就会把其他的比较函数给我生成好了。
from functools import total_ordering
@total_ordering
class Student:
def __init__(self, age):
self.age = age
def __lt__(self, other):
if isinstance(other, Student):
return self.age < other.age
else:
raise AttributeError("Incorrect attribute!")
def __eq__(self, other):
if isinstance(other, Student):
return self.age == other.age
else:
raise AttributeError("Incorrect attribute!")
liming = Student(20)
lihua = Student(30)
print(liming < lihua)
print(liming <= lihua)
print(liming > lihua)
print(liming >= lihua)
print(liming == lihua)
# 输出
True
True
False
False
False
可以看出,其他的比较运算,total_ordering都给你定义好了。