数据类未从其父级继承 __eq__() 方法

Dataclass not inheriting __eq__() method from its parent

我有一个父数据class和一个子数据class继承第一个class。我在父数据 class 中重新定义了 __eq__() 方法。但是当我比较对象子数据class时,它没有使用父数据class中定义的__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)

@dataclass 装饰器添加了默认的 __eq__ 实现。

如果你使用

@dataclass(eq=False)

它将避免这样做。

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

默认情况下,dataclass 装饰器为装饰后的 class 生成一个 __eq__ 方法。要禁用它(允许 B 继承 A.__eq__),您需要调整装饰器。

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