超级对象上的__eq__

时间:2016-11-28 16:54:36

标签: python python-2.7 super

以下一段代码在Python 3(3.5.2)中运行良好,但在Python 2(2.7.12)中引发AttributeError: 'super' object has no attribute '__eq__'

class Derived(int):

    def __eq__(self, other):
        return super(Derived, self).__eq__(other)


a, b = Derived(1024), Derived(1729)
print(a == b)

期望Python 3的行为。我试图理解为什么它在Python 2中不起作用。

请注意,此问题与'super' object has no attribute '__eq__'

不重复

1 个答案:

答案 0 :(得分:3)

这里发生的事情是Derived的超级是int。在Python 2中,int未实现丰富的比较运算符,例如__lt____gt____eq__,因为它使用__cmp__。但是,Python 3不支持__cmp__,因此{3}在Python 3中实现了丰富的比较运算符,如int__lt____gt__。所以,在Python 2中的__eq__ Derived不存在,因为Python 2中不存在super.__eq__