メタプログラミング in python
PythonでもRubyみたいなメタプログラミング(method_missing, sendとか)が色々出来るみたい。 ちょっとずつ調べて書いていく。
モンキーパッチ(オープンクラスとは違う)
- 動的にメソッド定義できる(なんと!!)。オープンクラスというよりはクラスのattrに直接代入という感じ。
- でも、組み込み型にメソッド追加はできないし、Rubyのクラスを再オープンというものではないみたい。
- 注意点として、追加するメソッドの第一引数にselfがあることを忘れないこと。
- ウェブを見ると、パッチを当てたことがわかるように、元のメソッドに戻せるようにしておいて、withと一緒に使って影響を局所化するやり方も紹介されている。
# Monckeyクラスに後からメソッドfを定義する class Monckey(): pass def f(self): print("I'm a monckey !") mon = Monckey() Monckey.f = f