クラスとかモジュールとかなんとなく理解しているつもりになりがちですが、私自身恥ずかしながらいつも知ったかぶりをしてしまいます。と言うことで恥を忍んで自分用にもまとめました。
本説明ですが少々概念的であるため、初学者にとってはなかなか理解しづらいと思います。そこで、下のような図と例文を作成してみました。一つ目が完成品メーカーにおける指示の記述、二つ目がPython世界における考え方の記述です。そもそもPythonはオブジェクト指向のプログラミング言語のため、各モジュール内にオブジェクトとしてクラスが格納されており、それを必要に応じて呼び出して使います。では、現実世界(目に見えるハードウェアの世界)で考えていましょう。あなたは完成品メーカーで管理職として働いているとします。完成品メーカーは部品メーカーから物を調達して、組み立て世に出すのが役割ですね。現在部品メーカーAから部品Dを調達していますが、例えば災害によりAの工場Bの操業が停止になってしまったとします。当然部品Dは安定供給が難しくなるため他のサプライヤーを探します。その際の指示は以下のようになるでしょう。
これをPythonの世界で考えると以下の通りです。
以上のように(?)実際にはこんなに丁寧に表現することはありませんが、より広い概念から狭い範囲まで構造化できると、各用語の関係性についてのイメージがつきやすいと思います。(例文が意味不明という意見は受け付けません。)続いて、各要素の説明に移ります。
先述の完成品メーカーの例でいう 部品メーカー にあたります。
Pythonをインストールした時点で利用できるライブラリです。pip
コマンドでインストールすることなく使用することができます。標準ライブラリだけでも膨大な量があるので、こちらのPython標準ライブラリ(公式ドキュメント)を常に参照できるようにしておくと良いですね。
enumerate()
, open()
, print()
, range()
, str()
, etc.
False
, True
, None
, etc.
False
, True
, None
), 比較(>
, <
, ==
), 数値型(int
, float
), etc.
math
, random
, statistics
), ファイル・ディレクトリアクセス(os.path
, pathlib
), etc.
Pythonのインストール後にpip
コマンド等を使って別途インストールしてから使うことができるライブラリです。例えば、WebアプリケーションフレームワークのDjango
や機械学習ライブラリのscikit-learn
等がそれにあたります。AIや機械学習で有名なPythonですが、このようなライブラリが一役買っています。
先述の完成品メーカーの例でいう 部品メーカー にあたります。
__init__.py
ファイルが存在していることが特徴です。
例えば、Djangoのディレクトリ構成の記事でも紹介しましたが各ディレクトリ(sample_project
、sample_app
)内にも同様にありますよね。__init__.py
ファイル内には何も記述されていなくても大丈夫ですが、__init__.py
ファイルによってディレクトリを パッケージ だと認識させることができ、そのディレクトリ内でモジュールを検索することができます。※ただし、version 3.3以降は__init__.py
がなくてもディレクトリをパッケージと認識してくれます。先述の完成品メーカーの例でいう 工場 にあたります。
.py
がついた、クラスやメソッド・関数がまとめられたファイルです。難しく考える必要はないですね。先述の完成品メーカーの例でいう 部門 にあたります。
先述の完成品メーカーの例でいう 部品 にあたります。 いずれもクラス内の実際の処理内容で、並列で記載しましたが、厳密には違います。なお、下記の通り説明していますが、例外はあります。
print()
関数は引数を入れてあげればいつでも呼び出し可能ですね。.(ドット)
を付け加える形式で呼び出すものです。例えば、リストから要素を取り出す.pop()
はメソッドにあたります。ということである程度違いが分かった(?)ところで、使い方についても見てみましょう。 Pythonでは次のようにモジュールをインポートして使えるようになります。上はパッケージ全部、下はパッケージの中でもモジュール指定でのインポートの方法です。モジュール指定してインポートするかどうかで、実際の呼び出し方が変わってきます。
上の方法ではパッケージ全体をインポートするため、パッケージ内の複数のモジュールにアクセスできます。ただし、モジュール名を指定する必要があるのでコード自体は長くなります。一方で下の方法では特定のモジュールだけをインポートしますが、モジュール内の関数やクラスを直接使用できるためコードの可読性が向上します。ただし、モジュールごとにインポートを記載する必要があります。どちらの方法を取るかは都度決めると良いと思います。
普段から使っていれば特に迷うことはありませんが、使い分けができていないとドキュメントを読むのに一苦労だと思うのでさっさと覚えてしまいましょう。
よろしければこちらの記事も参考にしてみてください。
Loading...