LoginSignup
20
21

More than 3 years have passed since last update.

パッケージ,モジュール,関数,インスタンス,クラス,メソッドの違い

Last updated at Posted at 2018-10-27

「パッケージ」「モジュール」「関数」「クラス」「インスタンス」「メソッド」の用語をpythonの場合で整理します.

モジュール

.pyのファイルを事を言います.
クラスが1つ以上含まれている必要があります.
例えば自分でmydefs.pyというファイルを作った場合,それは自作「モジュール」です.

パッケージ

異なる「モジュール」が複数集まって相互に関係しているコード群を「パッケージ」と言います.
注意事項としては,「__init__.py」というファイルを作らないとパッケージとして認識してもらえません.
こちらのページが参考になりました.

関数

例として,以下のmydefs.pyには2つの関数が書かれています.

def print_abc():
    print('abc')

def print_edf():
    print('edf')

print_abc()という関数を使う場合,インスタンスを生成して使います.

import mydefs as md
md.print_abc()

クラス,インスタンス,メソッド

もし,mydefs.pyモジュールの中に「クラス」が書かれているとします.

(例)

class Mydefs(object):

    def print_abc(self):
        print('abc')

    def print_edf(self):
        print('edf')

上の例では,Mydefsという「クラス」が書かれています.
print_abc()「メソッド」を使う場合,「インスタンス」を作成して使用します.

具体的には,以下のようprint_abcメソッドを使います.

import mydefs #モジュールをimport
md = mydefs.Mydefs() : 「クラス」Mydefsから,「インスタンス」mdを作成
md.print_abc() : 「メソッド」を使う

ちなみに,「クラス」をインポートしようとして

import mydefs.Mydefs

とするのは上手く行きません.
import出来るのは,「パッケージ」・「モジュール」単位であって「クラス」を直接インポートするのは不可能です.

モジュールのリロード

「モジュール」mydefs.pyを書き換えた時,Jupyter側で再importしても更新はされていません.私はimportlib.reloadを使って「パッケージ」がリロードするようにしています.

import importlib
importlib.reload(mydefs) #書き換えたmydefs.pyをリロード

以下のページがimportに関して詳しくまとめられており,参考になりました.
+ https://qiita.com/suzuki-hoge/items/f951d56290617df4279e

追記

shiracamus様からコメント頂きました.
ありがとうございました.

20
21
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
21