python import 基本

pythonの import について調べることが多いので周辺知識を簡単にまとめる.

概要は次の通り.

動作環境

  • CentOS 7.4.x
  • Python 3.6.5

予約語だから変数として使っちゃだめ

pythonでは比較的自由に変数名を決めることができる.
でも, import は予約語なので変数名としては使っちゃだめ.

モジュール

モジュールってなに? について.

  • モジュール
    • ファイルを分割して再利用する仕組みのこと
      • 別ファイル( xxx.py ) を呼び出すときに宣言するってこと
    • 呼び出した瞬間に実行される
      • モジュール内に print() とかあったら実行されちゃう
        • 自作する場合は注意

パッケージ

パッケージってなに? について.

  • パッケージ
    • moduleファイルを入れるディレクトリのこと
  • __init__.py
    • pythonに 「これはpythonのパッケージだよ!」 と認識させるためにこのファイルを設置する必要がある

import

次のいずれかを呼び出す宣言のこと.

  • モジュール
    • import モジュール名
      • .py は不要
  • クラス
  • メソッド
    • from モジュール名 import クラス名 または メソッド名
      • .py は不要
      • モジュール内の特定のクラス or メソッド のみ呼び出したいときにこっちの宣言方法を多用する

import の宣言時, 拡張子(.py)まで記述する必要はない.

使い方

import を使ってみる.
今回利用する import の記述パターンは次の通り.

  • import モジュール名
    • 特定のモジュールを呼び出したいときに
  • from モジュール名 import クラス名 または メソッド名
    • モジュール内の特定のクラス or メソッド のみ呼び出したいときに
  • import パッケージ名.モジュール名
    • 特定のパッケージ配下にあるモジュールを呼び出したいときに
  • import パッケージ名.モジュール名 as hogehoge
    • as
      • 長いな… と思ったときにエイリアス的に使える
  • from パッケージ名.モジュール名 import class名
    • 特定のclassのみを呼び出したいときに

ここからはいくつかのフィアルを作成しながら動作確認を行う.

import モジュール名

次のファイルを用意.

  • app.py
    • メインファイル
  • smplModule.py
    • モジュール
# smplModule.py

class SayHi:
    def __init__(self):
        pass

    def say():
        print('hi ! from SayHi Class.')
# app.py

import smplModule

SayHi = smplModule.SayHi # module名.クラス名
SayHi.say()

実行

$ python app.py
hi ! from SayHi Class.

from モジュール名 import クラス名 または メソッド名

次のファイルを用意.

  • app.py
    • メインファイル
  • smplModule.py
    • モジュール
# smplModule.py

class Sample:
    def __init__(self, name): # クラス変数に値をセット
        self.name = name

    def say(self):
        print('hi {0} from Sample class.'.format(self.name))
# app.py

from smplModule import Sample

sampleClass = Sample('takimoto')
sampleClass.say()

実行

$ python app.py
hi takimoto from Sample class.

import パッケージ名.モジュール名

次のファイルを用意.

  • app.py
  • myPackage/
    • __init__.py
    • smplModule.py
# __init__.py

# 今回はこのファイルは空でok
# myPackage\smplModule.py

class Sample:
    def __init__(self, name):
        self.name = name

    def say(self):
        print('hi {0} from Sample class'.format(self.name))

# app.py

import myPackage.smplModule

sampleClass = myPackage.smplModule.Sample('takimoto') # パッケージ名.モジュール名.クラス名
sampleClass.say()

実行

$ python app.py
hi takimoto from Sample class

import パッケージ名.モジュール名 as hogehoge

次のファイルを用意.

  • app.py
  • myPackage/
    • __init__.py
    • smplModule.py
# __init__.py

# 今回はこのファイルは空でok
# myPackage\smplModule.py

class Sample:
    def __init__(self, name):
        self.name = name

    def say(self):
        print('hi {0} from Sample class'.format(self.name))

# app.py

import myPackage.smplModule as smplM

sampleClass = smplM.Sample('takimoto') # as でエイリアスっぽく利用可能
sampleClass.say()

実行

$ python app.py
hi takimoto from Sample class

from パッケージ名.モジュール名 import class名

複数のクラスが存在するmoduleから, 特定のクラスのみを呼び出したいときに便利.

次のファイルを用意.

  • app.py
  • myPackage/
    • __init__.py
    • smplModule.py
# myPackage\smplModule.py

class SampleA:
    def __init__(self, name):
        self.name = name

    def say(self):
        print('hi {0} from SampleA class'.format(self.name))

class SampleB:
    def __init__(self, name):
        self.name = name

    def say(self):
        print('hi {0} from SampleB class'.format(self.name))
# app.py

from myPackage.smplModule import SampleB

sampleBClass = SampleB('takimoto')
sampleBClass.say()

実行

$ python app.py
hi takimoto from SampleB class

今回は以上.

スポンサーリンク
336 x 280 – レクタングル(大)
336 x 280 – レクタングル(大)
  • このエントリーをはてなブックマークに追加

この記事が気に入ったら
いいね!しよう

スポンサーリンク
336 x 280 – レクタングル(大)
トップへ戻る