Класс данных не наследует метод __eq __ () от своего родителя - PullRequest
2 голосов
/ 25 апреля 2020

У меня есть родительский класс данных, а подкласс класса наследует первый класс. Я переопределил метод __eq__() в родительском классе данных. Но когда я сравниваю подкласс объектов данных, он не использует метод __eq__(), определенный в родительском классе данных. Почему это происходит? Как я могу это исправить?

MWE :

from dataclasses import dataclass


@dataclass
class A:
    name: str
    field1: str = None

    def __eq__(self, other):
        print('A class eq')
        return self.name == other.name


@dataclass
class B(A):
    field2: str = None


b1 = B('b', 'b1')
b2 = B('b', 'b2')
print(b1 == b2)

Ответы [ 2 ]

4 голосов
/ 25 апреля 2020

По умолчанию декоратор dataclass генерирует метод __eq__ для декорированного класса. Чтобы отключить это (позволяя B наследовать A.__eq__), вам нужно настроить декоратор.

@dataclass(eq=False)
class B(A):
    field2: str = None
2 голосов
/ 25 апреля 2020

Декоратор @dataclass добавляет стандартную реализацию __eq__.

Я думаю, что если вы используете

@dataclass(eq=False)

, этого не будет.

См. https://docs.python.org/3/library/dataclasses.html

...