Python.use(better) #Tutor: step07 -- def do_help(self, view, target, item)

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

def do_help(self, view, target, item)

《著》小粒ちゃん+∞《監修》小泉ひよ子とタマゴ倶楽部
第0版♪2001/03/02 ● 第1版♪2003/05/25 ● 第2版♪2004/06/01 ● 第3版♪2009/02/28

基礎編で利用した学習ツールを作成する過程を通して「プログラミング」の理解を深めます。
※ Tcl/Tk で作成した例題を、Python3.1 で再構成しました。

事例:モジュールを起動する

■ 全項目を確認する

全ステップの「項目」を確認するには、関数 do を利用します。

$ python -i tutorTk.py
>>> do()
...
7: step07 -- def do_help(self, view, target, item):
■ 各項目を実行する

各ステップの「動作」を確認するには、関数 do に実引数を指定します。

>>> do(7)
>>> # -------------------------------------------------- step07

リスト領域の右側には、スクロールバーが現れます。

  • リスト領域(左下部)では、任意の項目を選択できます。

任意の項目を選択(ダブルクリック)すると、

  • テキスト領域(上部)には、選択した項目に関連する情報が表示されます。
  • テキスト領域(右下部)には、任意の文字を入力できます。

事例:コードの解説

def step07():
    """def do_help(self, view, target, item):"""

    class Tutor(object):
        ...
        def __call__(self, widget, target):         #@:
            s,*_ = widget.curselection()
            s = self.items[int(s)]
            self.do_help(self.help, target, s)

        def do_help(self, view, target, item):
            view.delete(1.0, END)
            s = eval("%s.%s.__doc__"%(target.__name__, item))
            view.insert(END, "%s"%s)
■ #1: 特殊属性 __doc__
    ## ---------------------------------------- before
        def __call__(self, widget):
            ...
            view = self.help
            view.delete(1.0, END)
            view.insert(END, "%s"%s)
    ## ---------------------------------------- after
        def __call__(self, widget, target):         #@:
            ...
            self.do_help(self.help, target, s)

        def do_help(self, view, target, item):
            view.delete(1.0, END)
            s = eval("%s.%s.__doc__"%(target.__name__, item))
            view.insert(END, "%s"%s)

特殊属性 __doc__ を参照すると、文書化文字列が得られます。

  • 組み込み関数 eval を用いて、実行時に確定したコードの断片を評価(実行)します。

例えば、リスト項目から "__add__" を選択すると、それが実引数 item の値になるので、

            s = eval("%s.%s.__doc__"%(target.__name__, item))
            s = eval("list.__add__.__doc__")
            s = list.__add__.__doc__

これらはどれも同じ結果になります。

》こちらに移動中です《
TOP


関連記事

Last updated♪2009/12/09