「パッケージ」「モジュール」「関数」「クラス」「インスタンス」「メソッド」の用語を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に関して詳しくまとめられており,参考になりました.
追記
shiracamus様からコメント頂きました.
ありがとうございました.