Python.use(better) #list: step01 -- def __repr__(self)

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

def __repr__(self)

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

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

■ 全項目を確認する

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

$ python -i myList.py
>>> do()
...
 1: step01 -- def __repr__(self)
■ 各項目を実行する

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

>>> do(1)
>>> s = myList(); s
[]
>>>
  • 生成したインスタンス(オブジェクト)は、要素を含まない空リスト s です。

結果として、

  • 括弧 [] の中には、何も出力されません。

事例:コードの解説

def step01():
    """def __repr__(self)"""

    class myList(object):
        def __init__(self):
            self.head = self.tail = Node()
        def __repr__(self):                 #1:
            s = []
            node = self.head.next
            while node:
                s.append(repr(node.item))
                node = node.next
            return "[%s]"%", ".join(s)

    ## ----------------------------------------
    def ex___init__(spec, local):
        X = 's = %s(); s'%spec
        print_(X, local)

    ## ----------------------------------------
    local = locals()
    ex___init__(SPEC, local)

## ----------------------------------------
def print_(source, local):                  #2:
    print(">>>",source)
    eval(compile(source,"","single"),globals(),local)
■ #1: オブジェクトの文字列表現
        def __repr__(self):                 #1:
            s = []
            node = self.head.next
            while node:
                s.append(repr(node.item))
                node = node.next
            return "[%s]"%", ".join(s)

メソッド __repr__ は、組み込み関数 repr に呼応して、オブジェクトの文字列表現を与えます。

  • 先頭のノード self.head から順に、各要素 node.item をリスト s に追加 append します。
  • 括弧 [] の中に、各要素をカンマ「, 」と空白文字で区切って列挙します。

《NOTE》対話モードでは、repr() を適用したのと同じ出力が得られます。

>>> "ABC"
'ABC'
>>> print(str("ABC"))
ABC
>>> print(repr("ABC"))
'ABC'
    
《発展課題》 次のような出力が得られる理由を考察してください。
>>> str("ABC")
'ABC'
>>> repr("ABC")
"'ABC'"
    
》こちらに移動中です《TOP

関連記事

Last updated♪2009/12/06