Python 弾丸ツアー #DP: ツリー ... step 4: Composite::Leaf
Python.use(better); Python 弾丸ツアー #DP: Tkinter/Python 編
>>> ツリー(階層構造)
step 4: Composite::Leaf
《Python3.1|Jython2.5|IronPython2.6》
《著》小粒ちゃん@湘南組《監修》小泉ひよ子とタマゴ倶楽部
第0版♪2001/03/02 ● 第1版♪2003/05/23 ● 第4版♪2010/03/08
step 4: コードの解説
■ 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]
 ̄前 step3 と同じです。
■ 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([str(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)
 ̄前 step3 と同じです。
■ Command::Invoker
## ---------------------------------------- Command::Invoker class Invoker(object): pass class ButtonInvoker(Invoker, Button): def __init__(self, master, image, receiver): super().__init__( master=master, image=image, command=PanelCommand(receiver), )
 ̄前 step3 と同じです。
■ Command::Command
## ---------------------------------------- Command::Command class Command(object): def __init__(self, receiver): self.receiver = receiver def __call__(self): pass
 ̄前 step3 と同じです。
■ Command::ConcreteCommand
## ---------------------------------------- Command::ConcreteCommand class PanelCommand(Command): def __call__(self): self.receiver.createPanel()
 ̄前 step3 と同じです。
■ Visitor::Visitor
## ---------------------------------------- Visitor::Visitor class Visitor(object): def visitLeaf_(self, *args): pass def visitComposite_(self, *args): pass
 ̄抽象クラス Visitor では、共通するプロトコルを規定します。
・メソッド visitLeaf_ では、末端にあるノード(葉)に対する処理を規定します。
・メソッド visitComposite_ では、中間にあるノード(枝)に対する処理を規定します。
↑TOP
》作業中です《