《21》コンストラクター:メソッド __init__〈Python 2.x 版〉
実録:はじめてのプログラミング《記事一覧》
《21》コンストラクター:メソッド __init__
《著》小粒ちゃん+α《監修》小泉ひよ子とタマゴ倶楽部
2009年2月11日(水)
今日の進捗
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