Python入門トップページ


目次

  1. プログラミング言語
  2. Anaconda - Jupyter Notebook / JupyterLab の環境設定
  3. Python の基礎
  4. リスト,タプル,辞書,集合
  5. 再び Jupyter Notebook の操作
  6. Python の制御構文
  7. 関数
  8. 便利な関数など
  9. リストの内包表記
  10. 多次元リスト
  11. クラス
    1. クラスの定義とインスタンス化
    2. クラスの初期化
    3. 属性の変更
    4. メソッドの定義(ゲットメソッド)
    5. メソッドの定義(セットメソッド)
    6. メインモジュール
    7. クラスのインポート
    8. クラスの属性を取り出す
    9. クラスの属性値を取り出す
    10. クラスの属性と値を辞書形式で得る
    11. クラスの属性を削除する
    12. モジュールのサーチパス
    13. 様々なインポート方法
  12. 演習問題
  13. 雑多な情報

Python の基礎

クラス

様々なインポート方法

最後にモジュールのインポート方法について確認しておきましょう.まず,issue.py には次のように main( ) モジュールも記述しておきます.

issue.pyclass Issue:
    def __init__(self, subject):
        self.subject = subject
        self.description = ''
        self.priority = 0
        self.closed = False

    def is_closed(self):
        return self.closed

    def close(self):
        self.closed = True

def main():
    issue1 = Issue('件名です')
    issue1.description = '問題の詳細です'
    issue1.priority = 1
    issue1.close()

    print('subject :', issue1.subject)
    print('description :', issue1.description)
    print('priority :',issue1.priority)
    print('closed :', issue1.is_closed())

if __name__ == '__main__':
    main()

これまでは,issue.py を次のような方法でインポートして,Issue クラスのインスタンスを作成してきました.つまり,issue.py から Issue モジュールをインポートしているので,Issue( ) でインスタンスの作成ができるわけです.

from issue import Issue

issue1 = Issue('2nd Issue')
print(issue1.subject)
2nd Issue

Issue モジュールをインポートしているだけですから,issue.py にある main( ) モジュールを呼び出すことはできません.なお,以降の操作は Jupyter Notebook を利用しているときにはカーネルを再起動してから実行してください.

# Jupyter notebook の場合はその都度カーネルの再起動を行ってください.
from issue import Issue

main()
--------------------------------------------
NameError  Traceback (most recent call last)

NameError: name 'main' is not defined

次のように入力すると,issue.py から main モジュールをインポートしていることになります.よって main( ) を実行することが可能です.

# Jupyter notebook の場合はその都度カーネルの再起動を行ってください.
from issue import main

main()
subject : 件名です
description : 問題の詳細です
priority : 1
closed : True

issue.py から main モジュールをインポートしているので,Issue クラスのインスタンスは作成できません.

# Jupyter notebook の場合はその都度カーネルの再起動を行ってください.
from issue import main

issue1 = Issue('2nd Issue')
--------------------------------------------
NameError  Traceback (most recent call last)

NameError: name 'Issue' is not defined

この書き方は非推奨ですが,issue.py にあるすべてのモジュールをインポートすることもできます.この方法が推奨されない理由は,他のモジュールと名前が重複したときに意図しないモジュールが呼び出されてしまう可能性があるためです.

# Jupyter notebook の場合はその都度カーネルの再起動を行ってください.
from issue import *
main()
print('-------')
issue1 = Issue("importの確認")
print(issue1.subject)
subject : 件名です
description : 問題の詳細です
priority : 1
closed : True
-------
importの確認

次の方法でインポートすると,常に issue. を指定する必要があります.

# Jupyter notebook の場合はその都度カーネルの再起動を行ってください.
import issue
issue.main()
print('-------')
issue1 = issue.Issue("importの確認")
print(issue1.subject)
subject : 件名です
description : 問題の詳細です
priority : 1
closed : True
-------
importの確認

毎回 issue. を入力するのが面倒なら as 省略名を指定して呼び出すことも可能です.これは import numpy as npimport pandas as pdimport tensorflow as tf などで多用されている方法です.

# Jupyter notebook の場合はその都度カーネルの再起動を行ってください.
import issue as iss
iss.main()
print('-------')
issue = iss.Issue("importの確認")
print(issue.subject)
subject : 件名です
description : 問題の詳細です
priority : 1
closed : True
-------
importの確認

目次に戻る