Python.use(better, Tkinter=”GoF”) # Iterator #1

記事一覧 Python.use(better)《Python3.1》

Iterator #1

《著》森こねこ・小粒ちゃん+∞《監修》小泉ひよ子とタマゴ倶楽部
α版♪1993/11/25 ● β版♪1995/11/22 ● 第1版♪2003/05/23

概要

Tkinter/Python によるオブジェクト指向プログラミングへの扉を開きます。
※ Tcl/Tk で作成した例題を、Tkinter で再構成しました。

事例:コードの解説

■ Composite::Component
## ---------------------------------------- Composite::Component
class Component(object):

抽象クラス Component では、共通するプロトコルを規定します。

Iterator::Iterator
    ## ---------------------------------------- Iterator::Iterator
    def __iter__(self): pass

これらの抽象メソッドは、共通するプロトコルを規定するもので、子孫クラスで具体的な処理を記述します。

    ## ----------------------------------------
    def print(self):
        for i, e in zip(self.indents(), self.nodes()):
            print("%s%s"%("+  "*i, e))

メソッド print では、子孫クラスに共通する文字列表現を規定します。

  • indents を利用して、各ノードの階層をインデントによって表現します。
  • nodes を利用して、各ノードが保持する項目を表現します。
■ Composite::Leaf:単一オブジェクト
## ---------------------------------------- Composite::Leaf
class Leaf(Component):

具象クラス Leaf では、単一のノードを構成して、末端に位置する各ノード(葉)を実現します。

Iterator::Iterator
    ## ---------------------------------------- Iterator::Iterator
    def __iter__(self):
        return self

メソッド __iter__ は、組み込み関数 iter に呼応して、各ノードを参照する方法を規定します。

  • Leaf は、末端に位置するので、それ自身 self をリターン値にします。
    def __str__(self):
        return "%s"%self.item

メソッド __str__ は、組み込み関数 str に呼応して、オブジェクトに固有の文字列表現を規定します。

    ## ----------------------------------------
    def nodes(self):
        return [self.item]

メソッド nodes では、各ノードが保持する項目 self.item を列挙したリストをリターン値にします。

    def indents(self, level):
        return [level]

メソッド indents では、各ノードの階層 level を列挙したリストをリターン値にします。

    def dirs(self):
        return [False]

メソッド dirs では、ディレクトリーではないことを表わす False を要素とするリストをリターン値にします。

TOP