2

Pythonクラスをインポートし、そのモジュールでimportステートメントを実行しないようにするにはどうすればよいですか?

Module foo
    from bar import A

Module bar
    import alpha

    class A(object):
        ...

    class B(objects):
        ...

クラスAをインポートしたいのですが、クラスBは必要ありません。モジュールバーのimportステートメントはクラスBに必要ですが、(おそらく)ロードされるので、可能であればその依存関係をインストールする必要はありません。メモリに入れますが、使用されません。

どんな助けでもいただければ幸いです。

4

2 に答える 2

3

ソースをハッキングせずにbarインポートを停止することはできません。しかし、あなたはそれを書くことによってalpha「偽造」することができます:alphasys.modules

>>> import alpha
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named alpha
>>> import sys; sys.modules['alpha'] = object()
>>> import alpha
>>>

これは、Pythonがインポートされたモジュールをにキャッシュするために機能sys.modulesします。そのため、何かを2回インポートする場合、2回目にすべてのハードワークを実行する必要はありません。これに追加alphaすると、Pythonは既にインポート済みalphaであると見なすため、インポートbarしようとすると、キャッシュされたコピーが返されます。

明らかに、これを快適に実行できるかどうかを慎重に検討する必要があります。bar実際にalphaどこでも使用すると、予期しない方法でクラッシュします。

于 2012-04-26T09:33:27.333 に答える
1

インポートをクラスBの初期化に入れます

class B:
    def __init__:
        import alpha

私が間違っていなければ、これはうまくいくかもしれません

于 2012-04-26T09:35:14.180 に答える