私は、オーバーロードされた比較演算子を持つint派生クラスを持っています。int派生クラスからオーバーロードされた比較演算子を元のint比較にアクセスする
オーバーロードされたメソッドの本体では、元の演算子を使用する必要があります。
おもちゃ例:
>>> class Derived(int):
... def __eq__(self, other):
... return super(Derived, self).__eq__(other)
は、Python 3.3+で正常に動作しますが、例外AttributeError: 'super' object has no attribute '__eq__'
でのPython 2.7で失敗します。
私は、私は非常にきれいではない見つけ、いくつかのwalkarrounds、考えることができます。
try:
return super(Derived, self).__eq__(other)
except AttributeError:
return super(Derived, self).__cmp__(other) == 0
がベースの制御フローを分割しながら
return int(self) == other
は、ちょうどそれを比較するために、新しいint
オブジェクトを作成する必要がありますPythonのバージョンでは、私はひどく面倒です(Pythonのバージョンを明示的に調べています)。
Python 2.7および3.3+を使用して、元の整数比較をエレガントな方法で使用するにはどうすればよいですか?
あなたはアクセスすることができます ''スーパー.__ eq__'経由の方法を比較int'。しかし、Pythonのバージョンによっては、組み込み型のメソッドの比較方法が大きく異なります。したがって、python2は '1つの引数(other)を必要とし、python3は2(selfとother)を必要とします。 – infotoni91
' int(self)== int(other) 'はあまりにも面倒ですか? – Phillip
@Phillipそれは 'int(self)== other'よりもう一つオブジェクトを作成します – abukaj