エミ眠太の自由帳
 エミ眠太の自由帳
    
 
 基本      2022-04-03      

Pythonのライブラリ、パッケージ、モジュール、クラス、関数・メソッドの違い

Language:
 Python
Framework/Library:
Technology:
 環境構築
Platform/Tool:

記事一覧へ

目次


はじめに

クラスとかモジュールとかなんとなく理解しているつもりになりがちですが、私自身恥ずかしながらいつも知ったかぶりをしてしまいます。と言うことで恥を忍んで自分用にもまとめました。

例文と図

本説明ですが少々概念的であるため、初学者にとってはなかなか理解しづらいと思います。そこで、下のような図と例文を作成してみました。一つ目が完成品メーカーにおける指示の記述、二つ目がPython世界における考え方の記述です。そもそもPythonはオブジェクト指向のプログラミング言語のため、各モジュール内にオブジェクトとしてクラスが格納されており、それを必要に応じて呼び出して使います。では、現実世界(目に見えるハードウェアの世界)で考えていましょう。あなたは完成品メーカーで管理職として働いているとします。完成品メーカーは部品メーカーから物を調達して、組み立て世に出すのが役割ですね。現在部品メーカーAから部品Dを調達していますが、例えば災害によりAの工場Bの操業が停止になってしまったとします。当然部品Dは安定供給が難しくなるため他のサプライヤーを探します。その際の指示は以下のようになるでしょう。

  • 部品メーカーAのB工場内C部門に問い合わせて、製造している部品Dで代用してください。

これをPythonの世界で考えると以下の通りです。

  • 外部ライブラリAのBモジュール内にあるCクラスのDメソッド(関数)を利用してください。

以上のように(?)実際にはこんなに丁寧に表現することはありませんが、より広い概念から狭い範囲まで構造化できると、各用語の関係性についてのイメージがつきやすいと思います。(例文が意味不明という意見は受け付けません。)続いて、各要素の説明に移ります。

各要素

ライブラリ

先述の完成品メーカーの例でいう 部品メーカー にあたります。

  • 実にややこしいことに、ライブラリのことをパッケージと呼ぶこともありその逆もまた然りと両者は曖昧です。(ざっくりですが)パッケージをいくつかまとめた大きなものがライブラリだという理解で良いかなと思います。そして、そのライブラリには標準ライブラリと外部ライブラリの2つがあります。ラブライブはありません。

標準ライブラリ

Pythonをインストールした時点で利用できるライブラリです。pipコマンドでインストールすることなく使用することができます。標準ライブラリだけでも膨大な量があるので、こちらのPython標準ライブラリ(公式ドキュメント)を常に参照できるようにしておくと良いですね。

Python 標準ライブラリ

外部ライブラリ

Pythonのインストール後にpipコマンド等を使って別途インストールしてから使うことができるライブラリです。例えば、WebアプリケーションフレームワークのDjangoや機械学習ライブラリのscikit-learn等がそれにあたります。AIや機械学習で有名なPythonですが、このようなライブラリが一役買っています。

パッケージ

先述の完成品メーカーの例でいう 部品メーカー にあたります。

  • モジュールを集めたディレクトリで、__init__.pyファイルが存在していることが特徴です。 例えば、Djangoのディレクトリ構成の記事でも紹介しましたが各ディレクトリ(sample_projectsample_app)内にも同様にありますよね。__init__.pyファイル内には何も記述されていなくても大丈夫ですが、__init__.pyファイルによってディレクトリを パッケージ だと認識させることができ、そのディレクトリ内でモジュールを検索することができます。※ただし、version 3.3以降は__init__.pyがなくてもディレクトリをパッケージと認識してくれます。
  • 長々と説明しましたが、端的に言えばディレクトリです。

モジュール

先述の完成品メーカーの例でいう 工場 にあたります。

  • .pyがついた、クラスやメソッド・関数がまとめられたファイルです。難しく考える必要はないですね。

クラス

先述の完成品メーカーの例でいう 部門 にあたります。

  • モジュール内にありメソッドや関数をまとめて記述した処理のものです。

メソッド・関数

先述の完成品メーカーの例でいう 部品 にあたります。 いずれもクラス内の実際の処理内容で、並列で記載しましたが、厳密には違います。なお、下記の通り説明していますが、例外はあります。

  • 関数・・・単独で呼び出し可能なものです。例えば、print()関数は引数を入れてあげればいつでも呼び出し可能ですね。
  • メソッド・・・変数や値に.(ドット)を付け加える形式で呼び出すものです。例えば、リストから要素を取り出す.pop()はメソッドにあたります。

使用法

ということである程度違いが分かった(?)ところで、使い方についても見てみましょう。 Pythonでは次のようにモジュールをインポートして使えるようになります。上はパッケージ全部、下はパッケージの中でもモジュール指定でのインポートの方法です。モジュール指定してインポートするかどうかで、実際の呼び出し方が変わってきます。

上の方法ではパッケージ全体をインポートするため、パッケージ内の複数のモジュールにアクセスできます。ただし、モジュール名を指定する必要があるのでコード自体は長くなります。一方で下の方法では特定のモジュールだけをインポートしますが、モジュール内の関数やクラスを直接使用できるためコードの可読性が向上します。ただし、モジュールごとにインポートを記載する必要があります。どちらの方法を取るかは都度決めると良いと思います。

まとめ・参考

普段から使っていれば特に迷うことはありませんが、使い分けができていないとドキュメントを読むのに一苦労だと思うのでさっさと覚えてしまいましょう。


記事をシェアする


関連する記事

よろしければこちらの記事も参考にしてみてください。

Loading...




記事一覧へ