0

Python では、等値が特定のデータに基づく必要があるクラスの等値とハッシュをオーバーライドしなければならないことがよくあります。私は通常、これをこのようなスーパークラスに抽象化することになりますが、Python にこのようなものが組み込まれているのか疑問に思っていました。それは一般的なタスクのようです。

class ValueType(object):
    def __init__(self, *args, **kwargs): super(ValueType, self).__init__(*args, **kwargs)
    def __eq__(self, other): return self._key() == other._key()
    def __ne__(self, other): return self._key() != other._key()
    def __hash__(self): return hash(self._key())    
4

1 に答える 1

0

私の知る限り、答えはノーですが (Python を 2 年間使用したことに基づく)、それはほとんど証明されていません。

ただし、実際には、あなたが持っているような ABC を使用するかどうかはわかりません。おそらく、ミックスインとして使用する方が理にかなっており、initを明確に削除できます。Python はミックスインを明示的にサポートしていませんが、多重継承をサポートしているため、簡単に実装できます。合意があると仮定すると、Python メソッド解決順序 (MRO) を調べて、クラスを正しく順序付けていることを確認する必要があります。(この場合、 のValueType前にある必要がありますobject。)

于 2012-08-09T18:55:08.630 に答える