17

モジュール内の関数を動的に定義してから、モジュールと__all__関数の__name__属性を更新して、モジュール内の名前と一致させます。__module__関数の属性を更新して、関数が存在するモジュールを指すようにするのは良い考えかどうか疑問に思っていました。ドキュメントは次のように述べ__module__ています。

関数が定義されたモジュールの名前、または利用できない場合は None。

関数を作成するコードは、関数が存在するモジュールとはほとんど関係のない別のモジュールに存在します。このモジュールには関数への参照はありません。

私はメーリングリストをいじり回しましたが、のセマンティクスが何であるか、__module__およびそれを None に設定する必要があるか、関数が存在するモジュールまたはコードが存在するモジュールを作成する必要があるかについて少し混乱しています関数。今のところはそのままにしておきますが、誰かが答えを知っているかどうかに興味があります.

4

2 に答える 2

8

私はそれをしません。あるモジュールから別のモジュールに関数をインポートすることは、よくあることです。この__module__プロパティは、関数が定義されたモジュールを取得して、ソース コードを読み取るか、場合によってはスクリプトに再インポートすることを目的としています。定義が静的コードによるものであるか動的であるかによって大きな違いがあるとは思いません。誰かが関数のソース コードを読みたい場合は、それを動的に作成するモジュールを調べる必要があります。

PEP 3130をご覧ください。__module__拒否されましたが、他のどこにでも見られる一文の説明よりも、の目的についてより多くの洞察を与えるかもしれません.

于 2012-04-17T15:37:30.060 に答える
1

通常は心配する必要はありません__module__。ダークマジックに使用されたり、関数がどこから来たのか(例)デバッグに使用されることもありますが、ほとんどの場合、誰もがそれを無視します。あなたの本当に心配しているセット__module__ = "dynamically_defined_function"または同様のものなら。

于 2012-04-11T21:08:21.703 に答える