1. ホーム
  2. python

Pythonのインポートに関する良い経験則は何ですか?

2023-09-16 12:02:05

質問

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を行いません -- これらは単にコードを遅くし、読みにくくするだけです。循環的なインポートの問題を簡単に解決する良い方法だと思う人もいるかもしれませんが、より良い解決策はコードの再編成です。