2019年10月14日月曜日

Python traitlet

JupyterのWidget に使われている Traitletについてしらべてみた。 ここにある。 要するに、比較的高機能なプロパティをクラスインスタンスに与えるためのパッケージ。高機能というのは
  • 型を制約。別の型の値を代入するとエラーになる。
  • デフォルト値を動的に計算可能にする。
  • 代入時に強制型変換をおこなったり、バリデーションチェックをおこなったりする。
  • 値が変更された際にcallback関数を呼び出す。
  • コンフィギュレーションファイルから値を読み込む。
どうも最後のことがやりたくて作ったんじゃないかという気がする。 使い方のサンプルはこんな感じ。
from traitlets import HasTraits, Integer, observe

class TraitletsExample(HasTraits):
    num = Integer(5, help="a number").tag(config=True)

    @observe('num')
    def _num_changed(self, change):
        print("{name} changed from {old} to {new}".format(**change))
widgetではobserveをあとから呼び出しているが、通常はこうやって関数を登録するようだ。 便利そうだが、おそそうでもある。

0 件のコメント: