2.1 パッケージとの出会い
パッケージっていうのは、モジュールをディレクトリ内に構造化する方法なんだよ。
パッケージはディレクトリで、
__init__.py
ファイルと1つ以上のモジュールが含まれてるんだ。
__init__.py
ファイルは空っぽでもいいし、パッケージの初期化コードを含んでもいいよ。
パッケージ/ディレクトリの構造例
mypackage/
__init__.py
module1.py
module2.py
__init__.py ファイルの内容 |
---|
|
module1.py ファイルの内容 |
---|
|
module2.py ファイルの内容 |
---|
|
このパッケージの関数を使ったコードの例:
import mypackage
print(mypackage.func1()) # 出力: Function 1
print(mypackage.func2()) # 出力: Function 2
下で自分のパッケージを書いてみよう。そして、他人のパッケージがどう動いてるかも見てみよう。
2.2 パッケージを段階的に作る
ステップ1: パッケージ構造の作成
最初のステップはあなたのパッケージのためのディレクトリとファイルの構造を作ることだよ。
例として、mypackage
って名前のパッケージを作って、
2つのモジュールmodule1.py
とmodule2.py
を含むことにしよう。
パッケージの構造例:
mypackage/
__init__.py
module1.py
module2.py
ファイルの説明:
-
__init__.py
: このファイルは空でもいいですし、パッケージの初期化コードを含んでいてもいいです。 Pythonがディレクトリをパッケージとして認識するために必要です。 -
module1.py
とmodule2.py
: これらのファイルはパッケージに含めたい関数、クラス、変数が 含まれます。
ステップ2: モジュールのコードを書く
モジュール用にシンプルなコードを書こう。
module1.py
def func1():
return "Function 1 from module1"
module2.py
def func2():
return "Function 2 from module2"
__init__.py
モジュールからパッケージレベルに関数をインポートするために、これらを
__init__.py
に追加するよ。
from .module1 import func1
from .module2 import func2
これでパッケージをインポートすると、func1
とfunc2
の関数が直接利用できるんだ。
ステップ3: パッケージのテスト
mypackage
ディレクトリと同じ場所にtest.py
ファイルを作って、
その中でパッケージを使ってテストしよう。
test.py
import mypackage
print(mypackage.func1()) # 出力: Function 1 from module1
print(mypackage.func2()) # 出力: Function 2 from module2
test.py
を実行して、パッケージが正しく動いていることを確認してね。
2.3 dir()
関数の使用
モジュールやパッケージをインポートしたときに、
dir()
関数を使うと、そのモジュールで利用できる全ての
属性やメソッドのリストを取得できるんだよ。新しい、またはあまり知らない
モジュールを扱うときに、どの関数やクラスが提供されているのかを
すぐに知りたい場合に、特に便利なんだ。
例: 標準モジュールmath
の調査
math
モジュールを調べるのにdir()
を使う例を見てみよう。
import math
print(dir(math))
このコードはmath
モジュールをインポートして、利用可能な全ての属性やメソッドのリストを表示するよ。
結果はこんな感じになる:
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan',
'atan2', 'atanh', 'ceil', 'comb', 'copysign', 'cos', 'cosh', 'degrees', 'dist', 'e', 'erf', 'erfc', 'exp', 'expm1',
'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf',
'isnan', 'isqrt', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'perm', 'pi', 'pow', 'prod',
'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc']
このリストはモジュールmath
に定義されている全ての関数と定数を含んでいるんだ。
例えばsin
、cos
、tan
、pi
とかね。
カスタムモジュールでのdir()
の使用
dir()
はユーザー定義モジュールでも使えるんだ。
例えば、mymodule.py
というファイルに以下の内容があるとします:
# mymodule.py
def greet(name):
return f"Hello, {name}!"
pi = 3.14159
このモジュールをインポートして、dir()
を使ってその内容を調べることができるんだ:
import mymodule
print(dir(mymodule))
結果は次の通り:
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__',
'greet', 'pi']
リストにはモジュールmymodule
の8つの特殊属性(アンダースコアで囲まれている)が含まれていて、
最後にgreet
メソッドとpi
変数が続くんだ。
GO TO FULL VERSION