Python.use(better) #list: step03 -- def __init__(self, sequence=None)
‖記事一覧‖ Python.use(better)《Python3.1》
def __init__(self, sequence=None)
《著》小粒ちゃん+∞《監修》小泉ひよ子とタマゴ倶楽部
第0版♪2001/03/02 ● 第1版♪2003/05/25 ● 第2版♪2004/06/01 ● 第3版♪2009/02/28
事例:モジュールを起動する
■ 全項目を確認する
全ステップの「項目」を確認するには、関数 do を利用します。
$ python -i myList.py >>> do() ... 3: step03 -- def __init__(self, sequence=None)
■ 各項目を実行する
各ステップの「動作」を確認するには、関数 do の実引数を指定します。
>>> do(3) >>> # ---------------------------------------- __init__ >>> s = myList(); s >>> s = myList("ABC"); s ['A', 'B', 'C'] >>> # ---------------------------------------- append >>> s = myList(); s >>> s.append('A'); s ['A'] >>> s.append('B'); s ['A', 'B'] >>> s.append('C'); s ['A', 'B', 'C'] >>>
- クラス呼び出し myList() の実引数(シーケンス)に含まれる各要素を列挙した、新たなリスト s が得られます。
事例:コードの解説
def step03(): """def __init__(self, sequence=None)""" class myList(object): def __init__(self, sequence=None): #1: self.head = self.tail = Node() if sequence: for e in sequence: self.append(e) def append(self, item): node = Node(item, self.tail.next) self.tail.next = node self.tail = node def __repr__(self): s = [] node = self.head.next while node: s.append(repr(node.item)) node = node.next return "[%s]"%", ".join(s) ## ---------------------------------------- tips = "__init__", "append", #2: for e in tips: print(">>> #","-"*40,e) eval("ex_%s(SPEC, local)"%e) ## ---------------------------------------- def ex___init__(spec, local): #@: X = 's = %s(); s'%spec print_(X, local) X = 's = %s("ABC"); s'%spec print_(X, local) def ex_append(spec, local): ...
■ #1: 初期設定
def __init__(self, sequence=None): #1: self.head = self.tail = Node() if sequence: for e in sequence: self.append(e)
メソッド __init__ は、クラス呼び出し myList() に呼応して、生成したインスタンスを初期設定します。
- 引数 sequence を指定すると、
- sequence の各要素 e を、連結リスト self の末尾に追加 append します。
■ #2: テストケースの評価
tips = "__init__", "append", #2: for e in tips: print(">>> #","-"*40,e) eval("ex_%s(SPEC, local)"%e)
テストケースの名前はすべて "ex_" で始まります。そこで、
- 組み込み関数 eval を利用して、実行時に確定するコードの断片を評価します。
すると、呼び出したい関数名は実行時に確定します。
例えば、for に続く制御変数 e の値が "append" のとき、
eval("ex_%s(SPEC, local)"%e) eval("ex_append(SPEC, local)") ex_append(SPEC, local)
これらはどれも同じ結果になります。
》こちらに移動中です《
↑TOP
関連記事
- Python への扉
- INDEX: I《Python》object.__init__
- INDEX《Python》eval
- 2009-04-01 実録 はじめての…《21》コンストラクター:メソッド __init__
Last updated♪2009/12/10