Python.use(better) #list: step10 -- def __setitem__(self, key, value)

記事一覧 Python.use(better)《Python3.1》

def __setitem__(self, key, value)

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

事例:モジュールを起動する

■ 全項目を確認する

全ステップの「項目」を確認するには、関数 do を利用します。

$ python myList.py
>>> do()
...
10: step10 -- def __setitem__(self, key, value)
■ 各項目を実行する

各ステップの「動作」を確認するには、関数 do の実引数を指定します。

>>> do(10)
...
>>> # ---------------------------------------- __setitem__
>>> s = myList("ABC"); s, len(s)
(['A', 'B', 'C'], 3)
>>> s[0] = 'X'; s, len(s)
(['X', 'B', 'C'], 3)
>>> s[1] = 'Y'; s, len(s)
(['X', 'Y', 'C'], 3)
>>> s[2] = 'Z'; s, len(s)
(['X', 'Y', 'Z'], 3)
>>>

事例:コードの解説

def step10():
    """def __setitem__(self, key, value)"""

    class myList(object):
        ...
        def __setitem__(self, key, value):     #1:
            node, n = self.head.next, 0
            while node:
                if n==key:
                    node.item = value; break
                node, n = node.next, n+1

    ## ----------------------------------------
    global dirs; local = locals()

    dirs += "__setitem__",
    for e in dirs:
        print(">>> #","-"*40,e)
        eval("ex_%s(SPEC, local)"%e)
■ #1: 要素の設定

メソッド __setitem__ は、演算子 [] に呼応して、各要素の値を設定します。

        def __setitem__(self, key, value):     #1:
            node, n = self.head.next, 0
            while node:
                if n==key:
                    node.item = value; break
                node, n = node.next, n+1

連結リスト self の各ノード node を順にたどりながら、

  • 変数 n(カウンター)が引数 key と同値なら、
    • 引数 key の値を設定します。
  • 引数 key と同値でないなら、
    • 次のノード node.next を再設定するともに、
    • 変数 n(カウンター)の値を1つ増やします。

》こちらに移動中です《
TOP


関連記事

Last updated♪2009/10/25