序列化上下文中 python 类的几个自定义 __eq__

问题描述 投票:0回答:1

假设我有一些复杂的类结构,其中包含一些层次结构、公共和私有字段。

我需要为此类进行一些自定义序列化。在反序列化后的一些测试中,我想比较原始对象和反序列化对象的实体。但由于序列化是自定义的 - 某些字段可能会有所不同。例如

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)

所以看起来我需要为此目的定制相等运算符。有一些优雅的方法来解决这个问题吗?

python serialization equality
1个回答
0
投票

我建议您为自定义比较实现一个附加方法。这将是更加干净和可扩展的方法。像这样的东西:

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
© www.soinside.com 2019 - 2024. All rights reserved.