class A:
pass
def b(self):
print('b')
A.b = b
a = A()
この時点で ab はバインドされたメソッド オブジェクトです。
a.b()
b には少なくとも 1 つの引数が必要であるというエラーが表示されます。
私の質問は次のとおりです。1. メソッドを既存のクラスに追加するにはどうすればよいですか? 2. この種のことに関して文書化された「ベストプラクティス」はありますか?
class A:
pass
def b(self):
print('b')
A.b = b
a = A()
この時点で ab はバインドされたメソッド オブジェクトです。
a.b()
b には少なくとも 1 つの引数が必要であるというエラーが表示されます。
私の質問は次のとおりです。1. メソッドを既存のクラスに追加するにはどうすればよいですか? 2. この種のことに関して文書化された「ベストプラクティス」はありますか?
これで問題なく動作するはずです ( http://ideone.com/WWPg8を参照) 。
Python 関数は記述子であり、クラスとインスタンスにそれぞれアクセスすると、バインドされていないメソッドとバインドされたメソッドに変換されます。http://docs.python.org/howto/descriptor.htmlを参照してください
"Monkey patching" のクラスとインスタンスは、何をしているのかが明確で、十分に文書化されている限り、完全に問題ないと見なされます。