Сравнение отдельных функций в пользовательских классах Python - PullRequest
0 голосов
/ 23 сентября 2019

Мне часто нужно сделать класс, который я сделал, сопоставимым по разным причинам (сортировка, использование набора, ...), и я не хочу писать несколько функций сравнения каждый раз.Как я поддерживаю класс, поэтому мне нужно написать только одну функцию для каждого нового класса?

1 Ответ

1 голос
/ 23 сентября 2019

Мое решение проблемы состоит в том, чтобы создать абстрактный класс, который класс может наследовать, и переопределить основную функцию сравнения (diff()) требуемым методом сравнения.

class Comparable:
    '''
    An abstract class that can be inherited to make a class comparable and sortable.
    For proper functionality, function diff must be overridden.
    '''
    def diff(self, other):
        """
        Calculates the difference in value between two objects and returns a number.
        If the returned number is
        - positive, the value of object a is greater than that of object b.
        - 0, objects are equivalent in value.
        - negative, value of object a is lesser than that of object b.
        Used in comparison operations.
        Override this function."""
        return 0

    def __eq__(self, other):
        return self.diff(other) == 0

    def __ne__(self, other):
        return self.diff(other) != 0

    def __lt__(self, other):
        return self.diff(other) < 0

    def __le__(self, other):
        return self.diff(other) <= 0

    def __gt__(self, other):
        return self.diff(other) > 0

    def __ge__(self, other):
        return self.diff(other) >= 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...