Python 弾丸ツアー #DP: ツリー ... step 3: Tkinter:コンポーネント
Python.use(better); Python 弾丸ツアー #DP: Tkinter/Python 編
>>> ツリー(階層構造)
step 3: Tkinter:コンポーネント
《Python3.1|Jython2.5|IronPython2.6》
《著》小粒ちゃん@湘南組《監修》小泉ひよ子とタマゴ倶楽部
第0版♪2001/03/02 ● 第1版♪2003/05/23 ● 第4版♪2010/03/08
step 3: コードの解説
■ Composite::Leaf:単体オブジェクト
## ---------------------------------------- Composite::Leaf class Leaf(Component): ## ---------------------------------------- Iterator::ConcreteIterator def __iter__(self): return self def __repr__(self): return "#%r"%self.item def __str__(self): return "%s"%self.item def items(self): return [self.item] def indents(self, level): return [level] def dirs(self): return [False] def nodes(self): return [self]
 ̄新たに追加したメソッド items では、各ノードが保持する項目 self.item を列挙したリストをリターン値にします。これは、変更する前のメソッド nodes と同じものです。また、変更したメソッド nodes では、単体オブジェクトである自身 self を要素とするリストをリターン値にします。□
■ Composite::Composite:複合オブジェクト
## ---------------------------------------- Composite::Composite class Composite(Component): def __init__(self, path, item): super().__init__(path, item) self.children = [] ## ---------------------------------------- Iterator::ConcreteIterator def __iter__(self): for e in self.children: yield e def __repr__(self): return "%s(#%s: [%s])"%( self.__class__.__name__, self.item, ",".join([repr(e) for e in self]), ) def __str__(self): return "\n".join([self.item]+[str(e) for e in self]) def items(self): return reduce(lambda s,e: s+e.items(), self, [self.item]) def indents(self, level=0): return reduce(lambda s,e: s+e.indents(level+1), self, [level]) def dirs(self): return reduce(lambda s,e: s+e.dirs(), self, [True]) def nodes(self): return reduce(lambda s,e: s+e.nodes(), self, [self]) def add_(self, component): self.children.append(component)
 ̄新たに追加したメソッド items では、各ノードが保持する項目 self.item を列挙したリストをリターン値にします。これは、変更する前のメソッド nodes と同じものです。また、変更したメソッド nodes では、複合オブジェクトである自身 self を要素とするリストをリターン値にします。□
《Point》実際の開発では、目論見が外れて後戻りを余儀なくされる場面が少なくありません。仕様変更と同様に、痛手を追って回復するまでの「プログラミングの効率」についても配慮する必要があります。この step3 で、メソッドの付け替え(items および nodes)を意図的に取り上げたのは、このような背景を踏まえたものです。□
↑TOP
》作業中です《