假设我有一些复杂的类结构,其中包含一些层次结构、公共和私有字段。
我需要为此类进行一些自定义序列化。在反序列化后的一些测试中,我想比较原始对象和反序列化对象的实体。但由于序列化是自定义的 - 某些字段可能会有所不同。例如
class A:
def __init__(self):
self.a = 0
self.b = 1
def __eq__(self, other_deserialized):
return self.a == other_deserialized.a
因此,在序列化的上下文中,对象是相等的,因为字段“a”是相等的(这是我对序列化唯一感兴趣的事情)。但在其他一些上下文中,我希望按所有字段比较对象,所以我想要
class A:
def __init__(self):
self.a = 0
self.b = 1
def __eq__(self, other):
return (self.a == other.a) and (self.b == other.b)
所以看起来我需要为此目的定制相等运算符。有一些优雅的方法来解决这个问题吗?
我建议您为自定义比较实现一个附加方法。这将是更加干净和可扩展的方法。像这样的东西:
class A:
def __init__(self):
self.a = 0
self.b = 1
def __eq__(self, other: "A") -> bool:
return (self.a == other.a) and (self.b == other.b)
def is_equal_by_a(self, other: "A") -> bool:
"""Compare object by 'a' attribute only."""
return self.a == other.a
first_object = A()
second_object = A()
first_object == second_object # For common comparison
first_object.is_equal_by_a(other=second_object) # For comparing by a only