为什么Python中没有默认的__le__和__ge__实现?

问题描述 投票:0回答:2

在数学上,binary relation≤是二元关系union,而二元关系≥是二元关系>和=的并集。那么,为什么有一个原因导致Python默认不以__le____lt__来实现__eq__,而没有以__ge____gt__的方式实现__eq__

默认实现是这样的:

def __le__(self, other):
    result_1 = self.__lt__(other)
    result_2 = self.__eq__(other)
    if result_1 is not NotImplemented and result_2 is not NotImplemented:
        return result_1 or result_2
    return NotImplemented

def __ge__(self, other):
    result_1 = self.__gt__(other)
    result_2 = self.__eq__(other)
    if result_1 is not NotImplemented and result_2 is not NotImplemented:
        return result_1 or result_2
    return NotImplemented

这将使用户不​​必始终实现这两种方法。

这里是Python documentation(强调我的部分)中的相关段落:

默认情况下,__ne__()委托给__eq__()并求反除非是NotImplemented。没有其他暗示比较运算符之间的关系,例如,真相(x<y or x==y)的值并不表示x<=y

数学上,二元关系≤是二元关系和=的并集。因此,Python这样做有原因吗?

python relationship comparison-operators
2个回答
1
投票

为什么要做出这个决定,只有原始作者知道,但是从手动得出的这些提示可以推断出原因:


0
投票

一个例子是通过比较运算符表达时间点。例如,automatic __bool__ is not applicable in every case仿真框架(免责声明:我维护此程序包)定义了__bool__。例如,我们可以使用比较来描述某个时间点“或之后”:

© www.soinside.com 2019 - 2024. All rights reserved.