定义相等操作以确定父级和子级是否实际相同的最佳做法是什么?有没有什么好方法可以实现这一目标,还是应该通过架构更改来避免这种期望的行为?
class Equal1(object):
def __init__(self, value):
self.value=value
def get_value(self):
return self.value
def __eq__(self, other):
if isinstance(other, self.__class__):
return self.__dict__==other.__dict__
return NotImplemented
class Equal2(Equal1):
def __init__(self, value):
super().__init__(2 * value)
self.other_values = ''
我希望以下代码评估为True
:
a = Equal1(2)
b = Equal2(1)
a == b
## True
它目前不会评估为True
,因为字典不相同,即使功能相同。
一种可能的技术是迭代较小的字典以检查所有键/值对,以确保它们是相同的,以及使用dir()
检查本地属性。
答案 0 :(得分:0)
所以你想忽略只有一个对象的键吗?
我建议更换:
return self.__dict__==other.__dict__
使用:
return all(self[k] == other[k]
for k in self.__dict__.keys() & other.__dict__.keys())
如果所有键都具有相同的值,则会使对象相等。