数据类未从其父级继承 __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)
它将避免这样做。
默认情况下,dataclass
装饰器为装饰后的 class 生成一个 __eq__
方法。要禁用它(允许 B
继承 A.__eq__
),您需要调整装饰器。
@dataclass(eq=False)
class B(A):
field2: str = None
我有一个父数据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)
它将避免这样做。
默认情况下,dataclass
装饰器为装饰后的 class 生成一个 __eq__
方法。要禁用它(允许 B
继承 A.__eq__
),您需要调整装饰器。
@dataclass(eq=False)
class B(A):
field2: str = None