inspectでマクロもどき
inspect.currentframeを使うと、関数の呼び出し元のモロモロにアクセスできます。
ローカル変数の辞書にも。
すると、呼び出し元に好き勝手に変数を追加、つまりマクロ的なことが出来ちゃいます。
def def_getter(*names): frame = inspect.currentframe(1) locals = frame.f_locals for name in names: locals[name] = property(attrgetter("_" + name)) class AlphaBlend(object): def_getter(*"source dest sub".split()) def __init__(self, source, dest, sub=False): self._source = source self._dest = dest self._sub = sub
AlphaBlendクラスに、source, dest, sub という、3つのプロパティを定義しています。
こうなるとRubyっぽいですね。
でも、果たしてinspectなんてヤバゲなモジュールを使った関数を使っていいものなのか?
それにしても、Pythonのプロパティは書きづらいですね。
デフォルトでは、自明なgetter, setterも手で書かないといけませんし。
新しい文法入れてでも改善して欲しいです。
それとも、プロパティなんて使うなってことなんでしょうか?