2017/06/18

Pythonの関数とクラスとインポートのメモ

Pythonの関数とクラスのメモです。
関数を外部ファイルに分離したときに1時間くらい引っかかって詰んだんだね。
気が付くまでずいぶんかかってしまった。

そんなときのための念のためのまとめ。
外部に書いたファイルを以下のものとする

sumple.py

# -*- coding: utf-8 -*-

def func():
        print "func!!"

str = "String!!"


sumple.pyを呼び出す処理は以下のようになる

パターン1

# -*- coding: utf-8 -*-

import sample

#sumple.pyの関数を呼び出す。
sample.func()

#sumple.pyの変数を呼び出す。
print sample.str

⇒実行結果
func!!
String!!

パターン2

# -*- coding: utf-8 -*-

from sample import func

#sumple.pyの関数を呼び出す。
func()

#sumple.pyの変数を呼び出す。
#これはできない!
#print str

⇒実行結果
func!!

ここまでのまとめ

外部のファイルを読み込むときは「 import ファイル名(.py)」を記述する。
fromを使うと呼び出しが「sample.func」から「func」に短縮できる。
ただし、直に書いている変数(ここではstr)が呼び出せない。

ここで疑問
呼び出し先のファイルが別のディレクトりにある場合は?
⇒「sys.path.append('パス')」を使って参照先のディレクトリを追加する

試してみよう「sample.py」を「./pylib」ディレクトリの中に移動して、
sample.pyを参照してみる。

# -*- coding: utf-8 -*-
import sys
sys.path.append('./pylib')

import sample

#sumple.pyの関数を呼び出す。
sample.func()

#sumple.pyの変数を呼び出す。
print sample.str

⇒実行結果
func!!
String!!
MEMO
もし上のディレクトリツリーの一つ上ならパスは「../」にする。

関数と変数を書いたものは読み込みが確認できたので次はクラス。
以下のクラスを書いたファイルを用意する

sample2.py

# -*- coding: utf-8 -*-

class Class:
    # コンストラクタ
    def __init__(self):
        self.str = "string!!"

    def func(self):
        print  "func!!"

    def getstr(self):
        return "get"+self.str

sample2のClassを読み込むには以下のようにする

パターン1

# -*- coding: utf-8 -*-
import sys
sys.path.append('./pylib')

import sample2

classins = sample2.Class()


#sumple.pyに書いたのクラスメンバメソッドを呼び出す。
classins.func()

#sumple.pyに書いたクラスメンバ変数を呼び出す。
print classins.str

#sample.pyに書いたクラスメンバメソッドを出してデータを取り出す。
print classins.getstr()

⇒実行結果
func!!
string!!
getstring!!

パターン2

# -*- coding: utf-8 -*-
import sys
sys.path.append('./pylib')

from sample2 import Class

classins = Class()


#sumple.pyに書いたのクラスメンバメソッドを呼び出す。
classins.func()

#sumple.pyに書いたクラスメンバ変数を呼び出す。
print classins.str

#sample.pyに書いたクラスメンバメソッドを出してデータを取り出す。
print classins.getstr()

⇒実行結果
func!!
string!!
getstring!!

クラスの読み込み、メソッドの使用ができました。

これで外部ファイルに書いた変数、クラス、関数を使用する手順が確認できました。 ご参考になれば。

0 件のコメント:

コメントを投稿

AWSに手を出してフレームワークも使ってみたが・・・。

サイトを作り直しました。 AWS上に構築した Content created by AXY を作り直しました。 具体的にはbottle.pyを使ったpythonで構築したサイトからPHP7を使用したサイトに再構築しています。 特別何か問題点があったというわけで...