《25》帰属:メソッド __contains__

記事一覧

実録:はじめてのプログラミング《Python3.1》
帰属:メソッド __contains__

《著》小粒ちゃん+α《監修》小泉ひよ子とタマゴ倶楽部
第0版♪2001/03/02 ● 第1版♪2003/05/25 ● 第2版♪2004/06/01 ● 第3版♪2009/02/28

帰属:メソッド __contains__

組み込み型 list と同様に、演算子 in を利用して要素が含まれるかを判定できると便利です。すると、

def ex___contains__():
    X = 's = myList("ABC"); s'
    print(">>>",X)
    eval(compile(X,"","single"))
    for e in "AB@":
        X = "{0!r} in s".format(e)
        print(">>>",X)
        print(eval(X))

>>> ex___contains__()
>>> s = myList("ABC"); s
['A', 'B', 'C']
>>> 'A' in s
True
>>> 'B' in s
True
>>> '@' in s
False

演算子 in を利用して、各要素が連結リストに含まれるかを判定できます。

class myList(object):
    ...
    def __contains__(self, value):
        for e in self:
            if e==value: return True
        return False

メソッド __contains__ は、演算子 in に呼応して、シーケンス内の要素かどうかを判定します。for に続く制御変数 e が、指定した引数 value と同じ値になるとき、真を表わす True をリターン値にします。同じ値が見つからないなら、偽を表わす False をリターン値にします。また、次のことから、

>>> s = myList("ABC"); s
['A', 'B', 'C']
>>> "A" in s
True
>>> s.__contains__("A")
True

メソッド __contains__ が、演算子 in と同等の表現になるのが分かります。

受講者への課題

else ブロックを利用して、次のように

    def __contains__(self, value):
        for e in self:
            if e==value: return True
        else:
            return False

としたとき、その長所/短所について考察してください。

Tips