operator.itemgetter
オブジェクトには__eq__
が定義されていないことがわかりました。そのため、比較のデフォルトはIDの確認(is
)です。itemgetterオブジェクトを比較する
2つのitemgetter
インスタンスを初期化引数リストが等しいと見なされるたびに等しいと定義することに不利な点はありますか?
このような比較の1つの使用例です。ソートを定義するためにキー関数が必要なコンストラクタを持つソートされたデータ構造体を定義するとします。例えば、assert
ステートメントの中で、2つのそのようなデータ構造が同じキー機能を持っているかどうか、またはそれらが安全にマージできるかどうかを確認するなどをチェックしたいとします。
2つの重要な機能がitemgetter('id')
である場合に、その質問に肯定的に答えることができればうれしいです。しかし、現在、itemgetter('id') == itemgetter('id')
はFalse
と評価されます。
私は、これは参考になるかが表示されない...そのCで 'itemgetter'が定義されているのを見て、' __getitem__'をオーバーライドしてクラスをハックし、2つのgetterを実行して同じ項目にアクセスしたかどうかを確認できます。これはエレガントで速い解決策ではありませんが、私はあなたがより良いやり方をすることはできません。 @ NiklasB。 –
私はこれの動機づけを提供するために質問を更新しました。 – max
この場合、 'lambda'式を使用します。 – satoru