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