7

私たちは常にPythonのインポートメカニズムを使用してモジュールや変数などをインポートしていますが、エクスポートとして機能するものはありますか?お気に入り:

モジュールからものをインポートします。

from abc import *

だから私たちは次のようにエクスポートできますか?:

to xyz export *

またはa、b、cをprogram.pyにエクスポートします

この質問はここで尋ねられる典型的なタイプの質問ではないことを私は知っています..しかし好奇心で..Pythonコンソールをチェックしましたが、「エクスポート」として存在するものはありません..おそらく別の名前で存在します。 。?

4

1 に答える 1

9

まず、エクスポート先のモジュールをインポートして、そのモジュールへの参照を作成します。次に、エクスポートするものをモジュールの属性として割り当てます。

# to xyz export a, b, c
import xyz
xyz.a = a
xyz.b = b
xyz.c = c

ワイルドカードのエクスポートを行うには、次のループを使用できます。

# to xyz export *
exports = [(k, v) for (k, v) in globals().iteritems() if not k.startswith("_")]
import xyz
for k, v in exports: setattr(xyz, k, v)

(モジュールをインポートする前に、エクスポートするオブジェクトのリストを収集することに注意してください。これにより、インポートしたばかりのモジュールへの参照をエクスポートする必要がなくなります。)

これは基本的にモンキーパッチの一種です。時間と場所があります。もちろん、それが機能するためには、「エクスポート」を行うモジュール自体を実行する必要があります。パッチが適用されるモジュールをインポートするだけでは、他のコードがパッチを適用しようとしていることに魔法のように気付くことはありません。

于 2013-01-04T20:17:20.830 に答える