2012-04-18 7 views
7

リストクラスの__contains__メソッドは、オブジェクト自体がリストの要素であるかどうかをチェックするのか、またはリストに指定されたパラメータと同等の要素が含まれているかどうかをチェックしますか?Pythonリストクラス__contains__メソッド機能

デモンストレーションの例を教えてください。

答えて

9
>>> a = [[]] 
>>> b = [] 
>>> b in a 
True 
>>> b is a[0] 
False 

これは、IDチェックではなく、値チェック(デフォルトでは少なくとも)であることを証明しています。ただし、クラスを希望する場合は、__contains__()を上書きしてIDチェックを行うことができます。しかし、再び、デフォルトでは、いいえ。

+0

これは完璧です! –

1

小切手の仕方によって異なります。組み込みの場合list==演算子を使用します。それ以外の場合はできませんでした。 'something' in somelistを安全にご利用ください。

具体的には、アイテムがリスト内のアイテムと等しいかどうかをチェックするため、内部的にはhash(a) == hash(b)と比較されます。ハッシュ値が等しい場合、オブジェクト自体もおそらく比較されます。

+1

ハッシュのチェックだけではなく、値が等しくなくてもハッシュを等しくすることができます。 –

+0

ありがとうございました。とても役に立つ情報です! –

+0

これは間違っています。私はちょうど '__eq__'メソッドを定義しました。これは' __contains__'または 'in'によって(非自発的に)選択されています。したがって、 'list'は 'a .__ eq __(b)'の比較を実装する可能性が最も高いです。 – Atcold