例如,我有这个类和它的两个实例:
class A:
def __init__(self, version):
self.version = version
a1 = A('1.0')
a2 = A('1.0')
因为没有直接的方法可以比较a1
和a2
。我使用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>
我想知道是否有一种方法可以在实例级别重写==
而无需更改类。