CodeGym /Javaコース /Python SELF JA /自分のパッケージを作る

自分のパッケージを作る

Python SELF JA
レベル 19 , レッスン 1
使用可能

2.1 パッケージとの出会い

パッケージっていうのは、モジュールをディレクトリ内に構造化する方法なんだよ。 パッケージはディレクトリで、 __init__.pyファイルと1つ以上のモジュールが含まれてるんだ。 __init__.pyファイルは空っぽでもいいし、パッケージの初期化コードを含んでもいいよ。

パッケージ/ディレクトリの構造例


mypackage/
    __init__.py
    module1.py
    module2.py
__init__.pyファイルの内容

# __init__.py
from .module1 import func1
from .module2 import func2
module1.pyファイルの内容

# module1.py
def func1():
    return "Function 1"
module2.pyファイルの内容

# module2.py
def func2():
    return "Function 2"

このパッケージの関数を使ったコードの例:


import mypackage

print(mypackage.func1())  # 出力: Function 1
print(mypackage.func2())  # 出力: Function 2

下で自分のパッケージを書いてみよう。そして、他人のパッケージがどう動いてるかも見てみよう。

2.2 パッケージを段階的に作る

ステップ1: パッケージ構造の作成

最初のステップはあなたのパッケージのためのディレクトリとファイルの構造を作ることだよ。 例として、mypackageって名前のパッケージを作って、 2つのモジュールmodule1.pymodule2.pyを含むことにしよう。

パッケージの構造例:


mypackage/
    __init__.py
    module1.py
    module2.py

ファイルの説明:

  • __init__.py: このファイルは空でもいいですし、パッケージの初期化コードを含んでいてもいいです。 Pythonがディレクトリをパッケージとして認識するために必要です。
  • module1.pymodule2.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

これでパッケージをインポートすると、func1func2の関数が直接利用できるんだ。

ステップ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に定義されている全ての関数と定数を含んでいるんだ。 例えばsincostanpiとかね。

カスタムモジュールでの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変数が続くんだ。

コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION