質問

次の構造があると仮定します。

app/
  __init__.py
  foo/
    a.py
    b.py
    c.py
    __init__.py

a.py、b.py、およびc.pyは、いくつかの共通のインポート(ロギング、OS、REなど)を共有します。これらの3つまたは4つの共通モジュールを __ init __。py ファイルからインポートできるので、すべてのファイルにインポートする必要はありませんか?

編集:私の目標は、各ファイルに5〜6個のモジュールをインポートすることを避けることであり、パフォーマンス上の理由とは関係ありません。

役に立ちましたか?

解決

いいえ、それらは各モジュールの名前空間に配置する必要があるため、何らかの方法でそれらをインポートする必要があります( logging を関数引数として渡さない限り、これは奇妙な方法です。控えめに言って)。

しかし、とにかくモジュールは一度しかインポートされない(そして a b 、および c 名前空間に配置される)ので、メモリを使いすぎるなどの心配はありません。

もちろん、それらを別のモジュールに入れて、 を各 a b 、および c 、ただし、この個別のモジュールは毎回インポートする必要があります。

他のヒント

include.py などの一般的なファイルを使用してこれを行うことができますが、ワイルドカードのインポートを伴うため、推奨されるプラクティスに反します。次のファイルを考慮してください。

app/
    __init__.py
foo/
    a.py
    b.py
    c.py
    include.py <- put the includes here.
    __init__.py

今、 a.py などで、次のようにします:

from include import *

上記のように、ワイルドカードのインポートは推奨されないため、推奨されません。

はい、でもやらない。真剣に、しないでください。しかし、まだそれを行う方法を知りたい場合は、次のようになります:

import __init__

re = __init__.re
logging = __init__.logging
os = __init__.os

面倒で無意味なだけでなく、パッケージが __ init __。py を実際にそのように使用することを想定していないため、それをしないように言います。パッケージの初期化コードです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top