定义父类和子类之间的等价

时间:2016-12-06 04:34:32

标签: python python-3.x

定义相等操作以确定父级和子级是否实际相同的最佳做法是什么?有没有什么好方法可以实现这一目标,还是应该通过架构更改来避免这种期望的行为?

父类

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()检查本地属性。

1 个答案:

答案 0 :(得分:0)

所以你想忽略只有一个对象的键吗?

我建议更换:

return self.__dict__==other.__dict__

使用:

return all(self[k] == other[k] 
           for k in self.__dict__.keys() & other.__dict__.keys())

如果所有键都具有相同的值,则会使对象相等。