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

記事一覧 Python.use(better, Tkinter=”GoF")《Python3.1》

Command #1

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

概要

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

事例:コードの解説

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

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

    def __init__(self, path, item):
        self.path = path
        self.item = item

メソッド __init__ では、ツリーの頂点に位置する self.path を初期設定します。

■ Command::Receiver
    ## ---------------------------------------- Command::Receiver
    def createPanel(self):
        top = Toplevel()
        top.title(self.item)
        top.config(padx=16, pady=4)

        current = join(self.path, self.item)

        frame = Frame(master=top)
        frame.pack()
        item = "getsize"
        w = Label(master=frame, text=item)
        w.pack(side=LEFT)
        w = Entry(master=frame, width=10)
        w.pack(side=LEFT)
        w.insert(END, getsize(current))

        frame = Frame(master=top)
        frame.pack()
        items = "getatime", "getmtime", "getctime", 
        for i, e in enumerate(items):
            w = Label(master=frame, text=e)
            w.grid(row=i, column=0, sticky=E)
            w = Entry(master=frame, width=22)
            w.grid(row=i, column=1, sticky=W)
            w.insert(END, eval("ctime(%s('%s'))"%(e, current)))

メソッド createPanel では、ツリーの各ノードの情報を提示するための、新たなパネルを生成します。

■ Composite::Leaf:単一オブジェクト
## ---------------------------------------- Composite::Leaf
class Leaf(Component):

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

Iterator::ConcreteIterator
    ## ---------------------------------------- Iterator::ConcreteIterator
    def items(self):
        return [self.item]

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

    def nodes(self):
        return [self]

メソッド nodes では、各ノード self を列挙したリストをリターン値にします。

■ Composite::Composite:複合オブジェクト
## ---------------------------------------- Composite::Composite
class Composite(Component):

具象クラス Composite では、複数のノードによって構成され、中間に位置する各ノード(枝)を実現します。

    def __init__(self, path, item):
        super().__init__(path, item)
        self.children = []

メソッド __init__ では、ツリーを構成する各ノードが保持する項目 self.item を初期設定します。

Iterator::ConcreteIterator
    ## ---------------------------------------- Iterator::ConcreteIterator
    def items(self):
        return reduce(lambda s,e: s+e.items(),
            self, [self.item])

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

    def nodes(self):
        return reduce(lambda s,e: s+e.nodes(),
            self, [self])

メソッド nodes では、各ノード self を列挙したリストをリターン値にします。

TOP


関連記事

Last updated♪2009/11/01