2016-11-28 1 views
2

は、Python 3(3.5.2)で正常に動作しますが、Pythonの2にAttributeError: 'super' object has no attribute '__eq__'を上げる(2.7.12)__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動作が期待されています。私はこの質問がここで何が起こっている'super' object has no attribute '__eq__'

+2

Python 2では 'int'には豊富な比較演算子がありません([here](http://stackoverflow.com/questions/10809932/python-why-does-the-int-class-not-have-rich参照) -comparison-operators-like-lt))。 Python 3は豊富な比較演算子を実装しています。 '__cmp__'は欠損しています。 –

答えて

3

の重複がDerivedのスーパークラスがintであることをされていないことに注意してください、それはPythonの2

では動作しない理由を理解しようとしています。 Python 2のintでは、代わりに__cmp__を使用するため、__lt____gt__、または__eq__のような豊富な比較演算子は実装されていません。しかし、__cmp__は、Python 3ではサポートされていませんので、int 2.

Pythonで存在していない int.__eq__ので、存在しないのPython 2、 super.__eq__Derivedで、 __lt____gt__のような豊富な比較演算子を実装し、だから、Pythonの3の __eq__
+0

私はある種の 'int'が0x000000001E298C40>型オブジェクトのこの' >>> int .__ eq__ から '__eq__'を実装していましたが、' int .__ eq __(1,2) 'とエラーが発生しました。 'int .__ eq __(0)'は 'NotImplemented'を返します。 – avamsi

+2

Python 2では、 'int .__ eq__'は' int'クラスを他のクラスと比較しています。 'int'を比較していません。 'int .__ eq __(int)'は真ですが、 'int .__ eq __(float)'はfalseになります。 –

+0

意味があります。説明をありがとう。 – avamsi

関連する問題