(106) import, from, asのいろいろ

投稿者: | 2019年10月23日

1. やりたいこと

基本的な記述法のおさらい をしておきたい。
ときどき基本的なことを見直さないと忘れてしまう…

外部モジュールを読み込むときに import xxxxx と記述する。
これの書き方を改めて整理しておく。

2. やってみる

ここでは、以下のようなファイル mymodule.py を使って使用例を記録しておく。

var_A = 10
var_B = 30
var_C = 50

def function_A():
    print("AAA")

def function_B():
    print("BBB")

class class_A:
    def __init__(self, a):
        self.a = a

(1) import xxxxx

一番シンプルな使い方、単純にモジュール全体を読み込む場合だ。
以下のように モジュール名.変数名 もしくは モジュール名.関数名モジュール名.クラス名 としてアクセスできる。

>>> import mymodule
>>>
>>> mymodule.var_A
10
>>> mymodule.var_B
30
>>> mymodule.function_A()
AAA
>>> mymodule.function_B()
BBB
>>> cA = mymodule.class_A(1)
>>> cA.a
1

(2) import xxxxx as yyyyy

モジュール xxxxx を別名 yyyyy として別名で読み込む場合だ。
名前が違うだけで、別名.変数名 もしくは 別名.関数名別名.クラス名 として、上記(1)と同じように使える。

>>> import mymodule as mm
>>>
>>> mm.var_A
10
>>> mm.function_A()
AAA
>>> cA = mm.class_A(2)
>>> cA.a
2

当然だが、元の名前では使えない。

>>> mymodule.var_A
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'mymodule' is not defined

(3) from xxxxx import yyyyy

モジュール xxxxxの中から、特定のクラスもしくは、変数、関数 yyyyyのみを読み込む場合だ。
モジュール内で定義されているクラスを使いたい場合に、よくこの書き方をする。

>>> from mymodule import class_A
>>>
>>> cA = class_A(3)
>>> cA.a
3

変数、関数でも使うことは出来る。

>>> from mymodule import var_A,function_A
>>> var_A
10
>>> function_A()
AAA

この書き方の場合、モジュール名を指定してはいけない。

>>> mymodule.var_A
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'mymodule' is not defined

また、importを指定していないクラス、変数、関数は使えない。

>>> function_B()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'function_B' is not defined

(4) from xxxxx import yyyyy as zzzzz

モジュール内の一部のクラスを使いたい & 名前が長いので省略名で使いたい
などの場合にこの書き方をする。

>>> from mymodule import class_A as cA
>>> var_cA = cA(4)
>>> var_cA.a
4

変数、関数でも使うことは出来る。

>>> from mymodule import var_A as vA
>>> vA
10
>>> from mymodule import function_A as fA
>>> fA()
AAA

この場合、複数の変数、関数を一度に読み出すことは出来ない。

>>> from mymodule import vA,function_A as vA,fA
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: cannot import name 'vA'

3. 所感

・個人的には、上記 2-(1),(2),(3)をよく使うかな。
・バックグラウンドで変更されたモジュールを読み直す場合、Python2系と 3系とて手順が異なるので要注意。
 (21) reloadで強制import


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*