Python.use(better) #Stack: step03 -- 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
クラスを用いない OOP を実践することで、OOP の理解を深めます。
※ Python1.5 で作成した例題を、Python3.1 で再構成しました。
事例:モジュールを起動する
■ 全項目を確認する
全ステップの「項目」を確認するには、関数 do を利用します。
$ python -i stack_func.py >>> do() ... 3: step03 -- def __repr__(self):
■ 各項目を実行する
各ステップの「動作」を確認するには、関数 do に実引数を指定します。
>>> do(3) >>> # -------------------------------------------------- step03 >>> s = Stack(); s >>> s.push("A"), s (None, ['A']) >>> s.push("B"), s (None, ['A', 'B']) >>> s.pop(), s ('B', ['A']) >>> s.pop(), s ('A', ) >>> s.pop(), s IndexError: pop from empty list (None, []) >>>
- 空のスタック s を用意します。
- push 操作でスタック s に要素を積むと、None がリターン値として得られます。
- pop 操作でスタック s から要素を降ろすと、その要素がリターン値として得られます。
- 空のスタックに pop 操作を適用しようとすると、例外 IndexError を生成します。
事例:コードの解説
def Stack(): class Tips(object): def __repr__(self): return self.__repr() #1: self = Tips(); del Tips self._Tips__repr = lambda: repr(self.items) self.items = [] self.push = lambda item: push(self, item) #2: self.pop = lambda : pop (self) return self def push(self, item): self.items.append(item) def pop(self): try: return self.items.pop() except IndexError as error: print("IndexError:", error)
■ #1: オブジェクトに固有の文字列表現
def __repr__(self): return self.__repr() #1: ... self._Tips__repr = lambda: repr(self.items)
メソッド __repr__ は、組み込み関数 repr に呼応して、オブジェクトに固有の文字列表現を与えます。
- 組み込み関数 repr によって、インスタンス属性 self.items が保持する要素を列挙した、文字列表現が得られます。
関連記事
- Python への扉
- INDEX: R《Python》object.__repr__
- INDEX: R《Python》repr
- INDEX: L《Python》lambda
- 2002-01-13 Python.use(better) 課題:スタック《クラス版》
Last updated♪2009/12/19