默认比较表示的Python魔术方法?

2024-03-28 14:55:04 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我想为一个类编写自定义比较函数,有没有一种方法来定义要比较的“what”而不是单独编写它们?你知道吗

class Version:
    def __init__(self, major, minor, patch):
        self.major = major
        self.minor = minor
        self.patch = patch

    @property
    def version(self):
        return self.major, self.minor, self.patch

    def __eq__(self, other):
        return self.version == other.version

    def __gt__(self, other):
        return self.version > other.version

    def __lt__(self, other):
        return self.version < other.version

比如说

class Version:
    def __init__(self, major, minor, patch):
        self.major = major
        self.minor = minor
        self.patch = patch

    def __representation__(self):
        return self.major, self.minor, self.patch

…对于所有类似比较的运算符,哪个会使用__representation__?你知道吗


Tags: 方法函数selfreturn定义initversiondef
1条回答
网友
1楼 · 发布于 2024-03-28 14:55:04

我不知道有什么方法可以一次性定义所有的东西。但是python提供了^{}装饰器,它要求您只编写__eq__和一个比较魔术方法,然后添加所有其他方法。你知道吗

示例:

@total_ordering
class Version:
    def __init__(self, major, minor, patch):
        self.major = major
        self.minor = minor
        self.patch = patch

    @property
    def version(self):
        return self.major, self.minor, self.patch

    def __eq__(self, other):
        return self.version == other.version

    def __lt__(self, other):
        return self.version < other.version

相关问题 更多 >