メタプログラミング 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