有没有让我可以做的功能
class Test():
def __init__(self):
self.value_1 = 42
x = Test()
y = Test()
deepequals(x, y) == True
x.value = 7
deepequals(x, y) == False
y.value = 7
deepequals(x, y) == True
但是,默认情况下,它始终为 false,因为 x 和 y 是不同的 Test 实例
有没有让我可以做的功能
class Test():
def __init__(self):
self.value_1 = 42
x = Test()
y = Test()
deepequals(x, y) == True
x.value = 7
deepequals(x, y) == False
y.value = 7
deepequals(x, y) == True
但是,默认情况下,它始终为 false,因为 x 和 y 是不同的 Test 实例
您可以实现__eq__
(等于)“魔术方法”:
class Test():
def __init__(self):
self.value_1 = 42
def __eq__(self, other):
return self.__dict__ == other.__dict__
其中__dict__
包含所有实例属性。True
当两个对象的所有相同属性的值都相同时,这将返回。这给出了你想要的结果:
>>> x = Test()
>>> y = Test()
>>> x == y
True
>>> x.value = 7
>>> x == y
False
>>> y.value = 7
>>> x == y
True
要支持与没有__dict__
属性的对象进行比较(例如在 C 中定义或使用的对象__slots__
),您可以先使用以下命令检查该属性hasattr
:
return hasattr(other, '__dict__') and self.__dict__ == other.__dict__
或使用getattr
默认值安全地访问它:
return self.__dict__ == getattr(other, '__dict__', None)
您可能想要实现__eq__
您的课程。然后您可以使用标准比较运算符:
class Test():
def __init__(self):
self.value = 42
def __eq__ (self, other):
return self.value == other.value
x = Test()
y = Test()
print (x == y)
x.value = 7
print (x == y)
y.value = 7
print (x == y)
class Test:
def __init__(self):
self.value_1 = 42
def __eq__(self, other):
return (
self.__class__ == other.__class__ and
self.value_1 == other.value_1)
t1 = Test()
t2 = Test()
print(t1 == t2)
输出
True