私はさまざまな種類のオブジェクト(さまざまな関数名、さまざまな署名)をいくつか持っており、さまざまな関数からそれらにアクセスするための共通の方法を持つようにモンキーパッチを適用しています。簡単に言うと、パッチを適用したいオブジェクトを受け取るディスパッチャがあり、オブジェクトタイプに応じて異なるパッチャを呼び出します。パッチャーは、オブジェクトにメソッドを追加します。
def patcher_of_some_type(object):
def target(self, value):
# do something and call self methods
object.target = types.MethodType(target, object)
# many more of these
プログラムがより複雑になるにつれて、オブジェクト(またはオブジェクトクラス)のラッパーを作成することをお勧めします。一部のパッチャーは、共通のコードを共有するか、相互に関連しています。しかし、私はオブジェクトの作成もクラスの作成も制御しません。オブジェクトのみを取得します。そして、それができたとしても、すべてではなく、特定のオブジェクトをラップ(またはパッチ)したいだけです。
1つの解決策は、既存のオブジェクトに基本クラスを追加することかもしれませんが、これがどれほど保守可能で安全かはわかりません。別の解決策はありますか?