モジュール内の関数を動的に定義し、モジュールの__all__
と関数の__name__
属性を、モジュール内の名前と一致するように更新しています。関数の__module__
属性を更新して、関数が存在するモジュールを指すようにするのが良い考えかどうか疑問に思っていました。ドキュメントでは、__module__
は:__module__の意味論
が定義されているモジュールの名前です。使用できない場合は、Noneです。
関数を作成するコードは、関数が存在するモジュールとはほとんど関係のない別のモジュールにあります。このモジュールの関数への参照はありません。
私はメーリングリストでいくつかのことをやってきましたが、__module__
のセマンティクスについてはちょっと混乱しています。もしそれをNoneに設定するのであれば、関数が存在するモジュールか、関数を作成したコードが存在します。今のところそれを残すつもりですが、答えを知っている人がいるかどうかを知ることに興味があります。
この深刻な魔法は、気になるかもしれないいくつかの場所で起こります(IIRCピクルは、読み込み時にクラスを見つけるためにIIRCピックルを使用します)、デバッグには非常に便利です。 – delnan
ピックルは、人々が考えるように頻繁に起こらない –
"* may * care"。あなたは問題ではない多くの状況があることは間違いありません。しかし、あなた自身で何も魔法をしていないときに、あなたが "正しい"価値を「必要とする」可能性もあります。 – delnan