《40》初期設定:メソッド __init__〈Python 2.x 版〉
実録:はじめてのプログラミング《記事一覧》
《40》初期設定:メソッド __init__
今日の進捗
- 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 は、初期設定(空リスト)のまま変化せずに、空辞書が得られます。《りす》 □
デザインパターン〈GoF〉Iterator
カタログには〈GoF〉Iterator として紹介されている、デザインパターンを適用した事例を紹介します。
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 を利用すると、オブジェクトに固有の文字列表現が得られます。