1,878 views
この記事は最終更新から 1812日 が経過しています。
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