私は自分のゲームの modding API を書いています。ユーザーがゲーム エンジンに、API 関数の 1 つの直前または直後に mod の関数を実行するように指示できるようにしたいと考えています。つまり、関数を「拡張」します。
これまでモッダーは、機能を追加するために関数を書き直さなければなりませんでした。これは、ゲームのソースコードを掘り下げることを意味していました。
現在、次のようなことを考えています。
def moddersFunction():
pass
myAPI.extendFunction('functionName', 'before-or-after', moddersFunction, extraArgs=[])
これを実装するための比較的クリーンな方法は何でしょうか? myAPI.extendFunction
つまり、あなたがそれを書くとしたら、 の内部はどのようになりますか?
myAPI.extendFunction が関数を追加する辞書を持つことを考えています。API の関数は、mod の関数が設定されている (「登録」されている) 場合にそれをチェックして実行します。しかし、これは、拡張を許可したい modding API のすべての関数で辞書をチェックするコードを追加することを意味します (チェックと関数呼び出し自体を実行する単一の関数呼び出しであっても、それ自体のようです) .
ゲームの API の既存のソースコードを「解体」することなく (誇張しているかもしれませんが)、このような関数の「拡張」を可能にする、巧妙な Python トリックがあるかどうか疑問に思っています。