如何仅在实例级别覆盖__eq__?

时间:2019-05-14 09:45:30

标签: python override

例如,我有这个类和它的两个实例:

class A:
    def __init__(self, version):
        self.version = version

a1 = A('1.0')
a2 = A('1.0')

因为没有直接的方法可以比较a1a2。我使用MethodType覆盖了两个实例的__eq__方法。

def compare(self, other):
    if not isinstance(other, self.__class__):
        raise TypeError
    return self.version == other.version

a1.__eq__ = MethodType(compare, a1, a1.__class__)
a2.__eq__ = MethodType(compare, a2, a2.__class__)

但是,经过所有这些努力,a1 == a2仍然返回False

在经过research之后,为了使==被覆盖,我必须为类(而不是实例)覆盖__eq__方法。

之所以不在类级别执行此操作,是因为这样做会污染类,我只使用某些函数(而不是子类)生成实例,并动态添加属性以进行比较。 / strong>

我想知道是否有一种方法可以在实例级别重写==而无需更改类。

0 个答案:

没有答案