3

CPython 拡張タイプに != と == を実装するにはtp_compare、を実装する必要がtp_richcompareありますか?

それぞれがどのような状況で呼び出されますか?

4

1 に答える 1

6

tp_richcomparePython 言語自体の豊富な比較の特別なメソッドに類似しています。tp_compareこれは、比較演算子がクラスで呼び出されるときに優先して選択されます。

tp_richcompare比較ロジックを細かく制御したい場合に使用します。たとえば、同等性を判断するための非常に安価な方法があるかもしれませんが、優先順位はありません。Saymemcmp(a, b, sizeof(*a)) == 0は、2 つの非常に複雑なデータ構造が等しいことを示しますが、それが 未満であるmemcmp(a, b, sizeof(*a)) < 0ことを示すわけではありません。その代わりに、決定に高価なアルゴリズムが必要になります。この関数では、 、またはを返すために、常に高価なアルゴリズムを使用する必要があります。関数 OTOH は、どちらの比較が意図されているかを教えてくれるので、当面の必要性に応じて、高価なアルゴリズムまたは安価なアルゴリズムのいずれかを選択できます。abtp_compare-101tp_richcompare

の追加の利点は、空間内のwhereやare ポイントtp_richcompareなど、意味のない操作に対して例外を発生させることができることです。u < vuv

于 2010-05-19T13:55:25.300 に答える