Как переопределить __eq__ только на уровне экземпляра? - PullRequest
0 голосов
/ 14 мая 2019
Например,

, у меня есть этот класс и два его экземпляра:

class A:
    def __init__(self, version):
        self.version = version

a1 = A('1.0')
a2 = A('1.0')

, потому что нет прямого способа сравнить a1 и a2.Я переопределяю метод __eq__ обоих экземпляров, используя MethodType.

def compare(self, other):
    if not isinstance(other, self.__class__):
        raise TypeError
    return self.version == other.version

a1.__eq__ = MethodType(compare, a1, a1.__class__)
a2.__eq__ = MethodType(compare, a2, a2.__class__)

Однако после всех этих усилий a1 == a2 по-прежнему возвращает False.

После некоторых исследований , я понимаю, что для переопределения == необходимо переопределить метод __eq__ для класса, а не для экземпляра.

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

Я хочу знать, есть лиспособ переопределить == на уровне экземпляра без изменения класса.

...