60秒以内にPython3モジュール入門〈講座11〉
今回はPython3モジュールとパッケージを紹介いたします。
モジュールは共通して利用したい実行ファイルをインポートできるように配置したもの。
-モジュール
複数の関数集めて一つのファイルに記述したもの。
パッケージはパッケージやモジュールをひとまとめにするもの。
-パッケージ
__init__.pyと複数のモジュール(.pyファイル)がディレクトリにまとまったもの。パッケージの中にパッケージを含めることもできます。ディレクトリ名がパッケージ名となり、親.子.モジュールのように.で区切って指定することができます。
まずモジュールについて見ていきましょう。
これはファイルを分割していくための仕組みですが、例を見ていきます。
今 Coin 関連のクラスが少し長くなってきたので、別ファイルで管理したくなった場合は。 例えば Coin.py というファイルを作ってあげて、そちらにコードを移動させてあげます。
では Coin 関連のクラスをこのように移動させてあげましょう。
このように別ファイルに書いたコードをモジュールと呼ぶので、覚えておいてください。
次にこのモジュールを読み込むには、myapp.py のほうで「import Coin」(import モジュール名)としてあげてください。
注意:拡張子の .py はいりません。
あとは読み込んだクラスや関数をモジュール名をつけて使ってあげれば OK です。
Coin.btc("btc", 1000000) のような感じですね。
import で読み込んだ瞬間に Coin.py が実行されてしまうことも覚えておきましょう。
例えばこのあたりに print("--------") があったりすると実行されてしまうので、注意しておいてください。
モジュールから指定した関数やクラスだけを読み込むこともできたりします。
例えば Btc だけを使いたい場合は、「from Coin import Btc」(from モジュール名 import クラス/関数名)と書いてあげます。
この場合、Btcを使うときにモジュール名は指定する必要はないので、それも覚えておきましょう。
では実行してあげると
ちなみにこの状態だと Btc しか読み込まれていないので、Coin を使おうとするとエラーになります。
ここで、複数のクラスを指定して読み込むにはカンマ区切りにしてあげればいいので、例えば from user import Coin, Btc としてあげてください。
続きをやっていきましょう。
前回見たモジュールなのですが、数が増えてくるとフォルダにまとめて分類したくなるはずです。
今回、単純にこちらの Coin モジュールをフォルダに入れてみます。
モジュールを入れるフォルダをパッケージというので、今回 mypackage というフォルダにしてあげまます。
パッケージを Python で認識させるには、そのフォルダの中に特殊なファイルが必要です。
ファイル名は決まっていて、__init__.py としてあげてください。
いろいろな設定が書けたりするのですが、とりあえず空で OK です。
そこまでできたら、myapp.py のほうから読み込んでみましょう。
使い方なのですが、「パッケージはフォルダがモジュール化されたもの」と考えるとわかりやすいかと思います。
したがって、モジュールと同じように使っていけば OK です。
では「import mypackage」(import モジュール名、つまりパッケージ名)としてあげて、mypackage の下の階層のモジュールを呼び出すには、ドットでモジュール名を書いてあげれば OK です(import mypackage.user)。
その後にクラスを使うには、パッケージから書いていけばいいので、mypackage.Coin.Btc() とすれば OK です。
では実行してあげると
もしくは、こちらの名前がちょっと長いという場合には別名をつけることができて、その場合は as で別名を付けてあげましょう。
では「mymodule」としてあげます。
そうすると、こちらの方はもっと短く「mymodule」と書くことができます。
これも実行してみると
それから、モジュールの時に見たように別の書き方もできて、どうするかというと「from」から始めてあげれば OK ですね。
「from mypackage.Coin import Btc」とすると、Btc クラスだけを読み込んでくれます。
その場合はもっと単純に Btc だけにすればいいので「btc = Btc("ビットコイン", 1000000)」で OK です。
クラスや関数が多くなってくると、このようにモジュールやパッケージを使って管理していくので慣れておくようにしてください。
#coding : utf-8
# import Coin
# from Coin import Btc
# import mypackage.Coin
# import mypackage.Coin as mymodule
from mypackage.Coin import Btc
btc = Btc("ビットコイン", 1000000)
print(btc.name)
btc.show_name()
btc.show_coin_info()
#Coinモジュール
class Coin:
def __init__(self, name):
self.name = name
def show_name(self):
print("name {0}".format(self.name))
class Btc(Coin):
def __init__(self, name, price):
super().__init__(name)
self.price = price
def show_coin_info(self):
print("子供クラス {0} ({1})".format(self.name, self.price))
print("---------")
以上
よろしくお願いいたします。
この記事が気に入ったらサポートをしてみませんか?