Python.use(better) 特殊メソッド __contains__
■ 特殊メソッド __contains__
$ python Python 3.0.1 (r301:69597, Feb 14 2009, 19:03:52) ... >>> help(str.__contains__) __contains__(...) x.__contains__(y) <==> y in x
メソッド __contains__ は、演算子 in に呼応して、オブジェクトの帰属関係を判定します。
□ 全項目を確認する
関数 do を利用すると、全ステップの「項目」を確認できます。
$ python -i special_method.py >>> do() @: tips_contains -- __contains__(...) ...
□ 各項目を実行する
関数 do に引数を指定すると、各ステップの「動作」を確認できます。
>>> do(@) >>> # -------------------------------------------------- tips_contains >>> s = Tips(); 0 in s #1: TypeError: argument of type 'Tips' is not iterable >>> s = Tips(); 0 in s #2: False >>> s = Tips(); 0 in s #3: False >>> s = Tips(); "0" in s False >>> s = Tips(); "A" in s True
■ 事例:コードの解説
class Tips(object): pass
メソッド __contains__ を定義せずに、演算子 in を利用すると、
>>> s = Tips(); 0 in s #1:
TypeError: argument of type 'Tips' is not iterable
例外 TypeError が生成され、エラーメッセージが出力されます。なぜなら、演算子 in の動作は、特殊メソッド __contains__ によって規定されるからです。
□ メソッド __contains__ を定義する
class Tips(object):
def __contains__(self, item):
return 0
メソッド __contains__ を定義すると、
>>> s = Tips(); 0 in s #2:
False
演算子 in を利用したときに、リターン値として False が得られます。なぜなら、値 0 は False と見なされるからです。
□ メソッドのリターン値
class Tips(object):
def __contains__(self, item):
return isinstance(item, str) and item.isalpha()
リターン値を再定義すると、
>>> s = Tips(); 0 in s #3: False >>> s = Tips(); "0" in s False >>> s = Tips(); "A" in s True
英字だけからなる文字列のときだけ、リターン値として True が得られます。
↑ TOP
》作業中です《update*13/02/17 1:19:41