1

True変数 (「定数」) に、その変数が値を返し、それ自体is==の比較のみを許可する値を割り当てたいと考えています。

int選択した値が他の型と衝突する可能性を考えて、 an やその他の型などの任意の値を割り当てることは避けたいと思います。

値がサポートする可能性のある比較で CPython のid()値の一意性を使用するクラスのインスタンスを生成することを検討しています。

ここから:

If no __cmp__(), __eq__()  or __ne__()  operation is defined, class instances are compared by object identity (“address”).

次のことをお勧めします。

MY_CONSTANT = object()

なんらかの方法でガベージ コレクションが行われ、比較中にその場所に別のものが割り当てられた場合にのみ、CPython 実装との比較で true を返します(これはおそらく起こらないと思います)。MY_CONSTANTMY_CONSTANT

4

2 に答える 2

1

はい。これは、一意の定数を定義する良い方法です。もちろん、比較対象のオブジェクトがすべてのものと等しいと定義されるという最小限のリスクがありますが、誰もが適度にうまくプレイしている場合、これは機能するはずです。また、ガベージ コレクションの問題は問題になりません。これが発生した場合、定数は既になくなっており、同じ ID を持つ新しいオブジェクトと同等に比較することはできません。

于 2010-02-09T19:20:26.410 に答える
0

MY_CONSTANTスコープ内にある限り、それが参照するオブジェクトはガベージ コレクションできません。の動作はオーバーライドできるため、常にis比較に使用する必要があります==

于 2010-02-09T19:50:45.017 に答える