Pythonのインポートに関する良い経験則は何ですか?
質問
Pythonでモジュールをインポートする方法が多数あるため、少し混乱しています。
import X
import X as Y
from A import B
私はスコープと名前空間について読んできましたが、何が最良の戦略なのか、どのような状況で、なぜなのかについて、いくつかの実践的なアドバイスが欲しいです。 インポートはモジュールレベルで行われるべきなのか、それともメソッド/関数レベルで行われるべきなのか? 例えば
__init__.py
またはモジュールコード自体で起こるのでしょうか?
私の質問は、"によって本当に答えられるものではありません。 Pythonのパッケージ - ファイルではなくクラスによってインポートする 明らかに関連していますが。
どのように解決するのですか?
弊社では、プロダクションコードにおいて、以下のルールに従うようにしています。
私たちはインポートをファイルの先頭、メインファイルのdocstringの直後に配置します、例.
"""
Registry related functionality.
"""
import wx
# ...
さて、インポートされたモジュールの中で数少ないクラスをインポートする場合、名前を直接インポートします。
from RegistryController import RegistryController
from ui.windows.lists import ListCtrl, DynamicListCtrl
しかし、例えば、起こりうるすべての例外のリストなど、何十ものクラスを含むモジュールも存在します。そこで、そのモジュール自体をインポートし、コード内で参照するようにします。
from main.core import Exceptions
# ...
raise Exceptions.FileNotFound()
私たちは
import X as Y
を使うことはできるだけ稀です。なぜなら、特定のモジュールやクラスの使い方を検索するのが難しくなるからです。しかし、時には、同じ名前を持ちながら異なるモジュールに存在する2つのクラスをインポートしたい場合など、使わなければならないこともあります。
from Queue import Queue
from main.core.MessageQueue import Queue as MessageQueue
一般的なルールとして、私たちはメソッドの内部でimportを行いません -- これらは単にコードを遅くし、読みにくくするだけです。循環的なインポートの問題を簡単に解決する良い方法だと思う人もいるかもしれませんが、より良い解決策はコードの再編成です。
関連
-
[解決済み] __init__.py は何のためにあるのですか?
-
[解決済み] パラメータに**(ダブルスター/アスタリスク)、*(スター/アスタリスク)がありますが、これはどういう意味ですか?
-
[解決済み] Pythonで静的なクラス変数は可能ですか?
-
[解決済み] Pythonのswitch文の代用品?
-
[解決済み] 億の相対的輸入
-
[解決済み] Pythonが解釈される場合、.pycファイルとは何ですか?
-
[解決済み] Pythonの「名前付きタプル」とは何ですか?
-
[解決済み] モジュール名を文字列で指定してインポートするには?
-
[解決済み】Python 3での相対インポート
-
[解決済み] あるオブジェクトが数であるかどうかを確認する、最もパイソン的な方法は何でしょうか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] PythonでファイルのMD5チェックサムを計算するには?重複
-
[解決済み] タプルのリストを複数のリストに変換するには?
-
[解決済み] pandasのタイムゾーンに対応したDateTimeIndexを、特定のタイムゾーンに対応したナイーブなタイムスタンプに変換する。
-
[解決済み] サブフォルダからのインポートモジュール
-
[解決済み] matplotlib でプロットの軸、目盛、ラベルの色を変更する方法
-
[解決済み] Pandasを使って、既存のExcelファイルに新しいシートを保存する方法は?
-
[解決済み] Python Empty Generator 関数
-
[解決済み] djangoのQueryDictをPythonのDictに変更するには?
-
[解決済み] 新しいpip backtrackingの実行時問題の解決
-
[解決済み] インポートパッケージ.* vs インポートパッケージ.SpecificType [重複].