結論から言うと、from ... import ... は、モジュールやパッケージの中から必要な名前だけを直接読み込む書き方です。
Pythonでは、import math のようにモジュール全体を読み込む方法と、from datetime import date のように一部だけを読み込む方法があります。
どちらも便利ですが、使い分けを知らないと、コードを読んだときに名前の出どころが分かりにくくなることがあります。
この記事では、from ... import ... の基本と、実務で読みやすく使うための考え方を整理します。
この記事でわかること
完成コード
完成コードは次の通りです。
from datetime import date
from pathlib import Path
def create_daily_report_path(folder: str, report_name: str) -> Path:
today = date.today().isoformat()
file_name = f"{today}_{report_name}.txt"
return Path(folder) / file_name
report_path = create_daily_report_path("reports", "sales")
print(report_path)同じ処理は、モジュール全体を読み込んで次のように書くこともできます。
import datetime
import pathlib
today = datetime.date.today().isoformat()
path = pathlib.Path("reports") / f"{today}_sales.txt"コードのポイント
このコードでは、datetime モジュールから date、pathlib モジュールから Path を直接読み込んでいます。
from datetime import dateでdateを直接使えるようにしていますfrom pathlib import PathでPathを直接使えるようにしていますdate.today()やPath(folder)のように短く書けます- 一方で、どのモジュールから来た名前かは
import行を見て確認する必要があります
from ... import ... は短く書くためだけの機能ではありません。
そのファイルで使う名前を明確にし、必要なものだけを読み込むための書き方です。
コードを順番に説明します
主要な処理を分けて説明します。
1. 必要な名前だけを読み込みます
from datetime import date
from pathlib import Pathこの部分では、モジュールの中から使いたい名前だけを読み込んでいます。date は日付を扱うクラス、Path はファイルパスを扱うクラスです。
import datetime と書いた場合は datetime.date.today() のようにモジュール名からたどります。from datetime import date と書いた場合は、date.today() のように直接使えます。
2. 読み込んだ名前を関数の中で使います
def create_daily_report_path(folder: str, report_name: str) -> Path:
today = date.today().isoformat()
file_name = f"{today}_{report_name}.txt"
return Path(folder) / file_nameこの関数では、今日の日付を使ってレポート用のファイルパスを作っています。date と Path を直接使えるため、処理が短くまとまっています。
戻り値の型注釈にも Path を使っています。
ファイル内で何度も使う名前なら、from ... import ... で直接読み込むと読みやすくなることがあります。
3. モジュール名付きの書き方と比べます
import pathlib
path = pathlib.Path("reports") / "sales.txt"モジュール全体を読み込む書き方では、pathlib.Path のようにモジュール名を付けます。
少し長くなりますが、どこから来た機能なのかは読み取りやすくなります。
反対に、from pathlib import Path は短く書けます。
ただし、読み込む名前が増えすぎると、コードの途中だけを見たときに出どころが分かりにくくなる場合があります。
実務で使うときのポイント
実務では、from ... import ... を使うかどうかは、短さよりも読みやすさで決めると扱いやすいです。
よく使うクラスや関数だけを少数読み込むなら、コードがすっきりします。
一方で、次のような場合はモジュール名付きの import も検討します。
- 同じような名前の関数が複数のモジュールにある
- どのライブラリの機能か明示したい
- 読み込む名前が多くなりすぎる
- チーム内で
import モジュール名を優先する方針がある
第5章のパッケージ構成では、from sales.report import create_report のような書き方も出てきます。
便利な書き方ですが、使う名前を絞ることが読みやすさにつながります。