Python.use(better, Tkinter=”GoF”) # Iterator #2
‖記事一覧‖ Python.use(better)《Python3.1》
《著》森こねこ・小粒ちゃん+∞《監修》小泉ひよ子とタマゴ倶楽部
α版♪1993/11/25 ● β版♪1995/11/22 ● 第1版♪2003/05/23
事例:コードの解説
■ Composite::Composite:複合オブジェクト
## ---------------------------------------- Composite::Composite
class Composite(Component):
具象クラス Composite では、複数のノードによって構成され、中間に位置する各ノード(枝)を実現します。
## ---------------------------------------- Iterator::Iterator def __iter__(self): for e in self.children: yield e
メソッド __iter__ は、組み込み関数 iter に呼応して、各ノードを参照する方法を規定します。
- Composite は、その傘下にある各ノード self.children が保持する項目 e をリターン値にします。
《TIPS》メソッド __iter__ を定義すると、self と記述するだけで、それを実現する方法(how)に依存しない、抽象表現(what)が可能になります。
def __repr__(self): return "%s(#%s: [%s])"%( self.__class__.__name__, self.item, ",".join([str(e) for e in self]), )
メソッド __repr__ では、__iter__ を規定してあるので、その傘下にある複数のノードを参照したいときには、self と記述するだけで十分です。
def __str__(self): return "\n".join([self.item]+[str(e) for e in self])
メソッド __str__ は、組み込み関数 str に呼応して、オブジェクトに固有の文字列表現を規定します。
## ---------------------------------------- def nodes(self): return reduce(lambda s,e: s+e.nodes(), self, [self.item])
メソッド nodes では、各ノードが保持する項目 self.item を列挙したリストをリターン値にします。
def indents(self, level=0): return reduce(lambda s,e: s+e.indents(level+1), self, [level])
メソッド indents では、各ノードの階層 level を列挙したリストをリターン値にします。
def dirs(self): return reduce(lambda s,e: s+e.dirs(), self, [True])
メソッド dirs では、ディレクトリーであることを表わす True を要素とするリストをリターン値にします。
↑TOP
関連記事
- INDEX《Tkinter》
- Python で学ぶ デザインパターンの世界《Tkinter》
- Let’s GoForward - GoF を反面教師に
- C# Design Patterns 24. The Iterator Pattern.
- Python.use(better, Tkinter=”GoF”)
Iterator
Last updated♪2009/10/30