《21》コンストラクター:メソッド __init__〈Python 2.x 版〉

実録:はじめてのプログラミング記事一覧
《21》コンストラクター:メソッド __init__

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

今日の進捗

  • Language Reference: Data model
  • Python.use(better) -- セミナー研修テキスト
  • 連結リスト課題を「続・ひよ子のきもち」で公開
Comment
本人:野中 組み込みのlist型と同じものを自分で作ってみるとナットクといった感じがします。
担当:伊藤/本間 。(^^)

コンストラクター:メソッド __init__

メソッド append を利用して、各要素をひとつずつ追加していたのでは面倒です。そこで、

def ex():
    s = myList()
    print s,"\t#",s.__class__.__name__

    for e in "ABC":
        s.append(e)
    print s,"\t#",s.__class__.__name__

    print [e for e in myList("DEF")]
    print dict((e,ord(e)) for e in myList("ABC"))
    print reduce(lambda s,e: e+s, myList("ABC"), "")

>>> ex()
[] 	# myList
['A', 'B', 'C'] 	# myList
['D', 'E', 'F']
{'A': 65, 'C': 67, 'B': 66}
CBA

組み込み型 list と同様に(インスタンスを生成するときに)各要素をまとめて引数に指定できると、便利です。すると、クラス myList を、内包やジェネーター式などでも利用できます。

class myList(object):
    ...
    def __init__(self, sequence=[]):          # ver.2
        self.head = self.tail = Node()
        for e in sequence:
            self.append(e)

メソッド __init__ では、キーワード引数 sequence= を指定すると、連結リストに各要素をひとつずつ追加 append します。キーワード引数を省略すると、空リスト [] が初期値として設定されます。すると(for ブロックの本体を一度も実行しないので)属性 .head/.tail は、初期設定のまま変化せずに、空リストが得られます。こうして、空の連結リストを生成します。

Last updated♪09/03/11