您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

为什么我不能像Python 2一样在Python 3中使用__cmp__方法?

为什么我不能像Python 2一样在Python 3中使用__cmp__方法?

您需要提供在Python 3订货丰富的比较方法,这是__lt____gt____le____ge____eq__,和__ne__。另请参阅:PEP 207-丰富的比较

__cmp__是 不再使用。

更具体地说,__lt__selfother作为参数,并且需要返回是否self小于other。例如:

class Point(object):
    ...
    def __lt__(self, other):
        return ((self.x < other.x) and (self.y < other.y))

(这不是明智的比较实现,但是很难说出您要做什么。)

因此,如果您有以下情况:

p1 = Point(1, 2)
p2 = Point(3, 4)

p1 < p2

这等效于:

p1.__lt__(p2)

这将返回True

__eq__``True如果点相等False则返回,否则返回。其他方法类似地工作。

如果使用functools.total_ordering装饰器,则只需实现例如__lt____eq__方法

from functools import total_ordering

@total_ordering
class Point(object):
    def __lt__(self, other):
        ...

    def __eq__(self, other):
        ...
python 2022/1/1 18:27:36 有333人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶