《40》初期設定:メソッド __init__〈Python 2.x 版〉

実録:はじめてのプログラミング記事一覧
《40》初期設定:メソッド __init__

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

今日の進捗

  • The Python Standard Library: Mapping Types — dict
  • Python.use(better) -- セミナー研修テキスト
  • 連想リスト課題を「続・ひよ子のきもち」で公開
Comment
本人:野中 dictはPythonを構成する要素の中でもとくに重要と聞いていたので楽しみです。
担当:伊藤/本間 。(^^)

初期設定:メソッド __init__

連結リスト課題で作成したクラス myList と同様に、インスタンスを生成するところから始めます。

class myDict(object):
    def __init__(self, sequence=None):          # ver.2
        self._keys   = 
        self._values = 
        if sequence:
            for k,v in sequence:
                self._keys  .append(k)
                self._values.append(v)

クラス myDict は、連想リスト(辞書)を実現したものです。メソッド __init__ では、クラス呼び出し myDict() などに呼応して、生成したばかりのインスタンスを初期設定します。属性 ._keys がキー要素を、属性 ._values が値要素を参照するとともに、各要素対を保持します。
キーワード引数 sequence= を指定すると、連想リストに各要素対を追加 append します。この引数を省略すると、空の連想リストを生成します。

《Note》 キーワード引数 sequence= を省略すると、規定値 None を指定したものと見なされます。すると、if に続く条件式は、False と評価されるので、ブロック内に記述したコードを実行しません。そのため、属性 ._keys/._values は、初期設定(空リスト)のまま変化せずに、空辞書が得られます。《りす》 □

デザインパターンGoFIterator

カタログには〈GoFIterator として紹介されている、デザインパターンを適用した事例を紹介します。

    def _items(self):
        for k,v in zip(self._keys, self._values):
            yield k,v

メソッド _items は、各要素対(タプル)を参照する手段を提供します。組み込み関数 zip を使うと、同じオフセット位置にある各要素対を参照するのに便利です。また、yield 文を利用すると、要素(処理済/未処理)の取扱いが容易になります。すると、次のメソッドは、

文字列表現:メソッド __str__

    def __str__(self):                          # ver.2
        s = []
        for k,v in self._items():
            s.append("%r: %r"%(k,v))
        return "{%s}"%", ".join(s)

メソッド __str__ は、組み込み関数 str に呼応します。組み込み型 list に準拠させるために、書式指定文字列を利用します。書式指定文字列 %r を利用すると、オブジェクトに固有の文字列表現が得られます。

Tips

Last updated♪09/03/13