《25》帰属:メソッド __contains__〈Python 2.x 版〉

実録:はじめてのプログラミング記事一覧
《25》帰属:メソッド __contains__

《著》小粒ちゃん+α《監修》小泉ひよ子とタマゴ倶楽部
2009年2月17日(火)

今日の進捗

  • Language Reference: Data model; Emulating container types
  • Python.use(better) -- セミナー研修テキスト
  • 連結リスト課題を「続・ひよ子のきもち」で公開
Comment
本人:野中 読むべき資料がたくさんあり過ぎてちょっと迷子になってます。
担当:伊藤/本間 。(^^)

帰属:メソッド __contains__

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

def ex():
    s = myList("ABC")
    print s,"\t#",s.__class__.__name__
    for e in "AB@":
        print e,e in s,s.__contains__(e)

>>> ex()
['A', 'B', 'C'] 	# myList
A True True
B True True
@ False 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

Last updated♪09/03/13