以下一段代码在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中不起作用。
不重复答案 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__
。