Pythonで外部クラスの関数を実行する際に
上手くいかずにはまってしまいました…
解決方法をまとめましたので参考にして下さい
selfの定義が必要
外部ファイルのクラスを呼び出すには
呼び出し元のクラス、関数の第一引数に「self」の定義が必要です
関数の第一引数には、暗黙的に「self」が定義されています
注意が必要でした…
サンプルコード
クラス定義(呼び出し元)
Class_Sample.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
####################################################### #クラス 呼び出し元 ####################################################### #クラスの定義 class ExampleClass: #引数 無し def printHello(self): print ("Hello") #引数 有り def printStr(self,str): print (str) #引数 戻り値 有り def isOne_two(self,num): if num == 1: return True elif num == 2: return True else: return False |
クラス定義(呼び出し先)
Class_Sample_Callee.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
####################################################### #クラス 呼び出し ####################################################### #外部クラス読み込み import importlib #読み込みたいクラスのファイル名をimport文で指定 import Class_Sample importlib.reload(Class_Sample) #外部クラスのインスタンス化 exampleClass = Class_Sample.ExampleClass() #引数 無し 実行 exampleClass.printHello() |
selfを定義しないとエラーになる
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
####################################################### #クラス 呼び出し元 ※selfの定義なし エラーパターン ####################################################### #クラスの定義 class ExampleClass: #引数 無し def printHello(): print ("Hello") #引数 有り def printStr(self,str): print (str) #引数 戻り値 有り def isOne_two(self,num): if num == 1: return True elif num == 2: return True else: return False |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
####################################################### #クラス 呼び出し ※selfの定義なし エラーパターン ####################################################### #外部クラス読み込み import importlib #読み込みたいクラスのファイル名をimport文で指定 import Class_Sample importlib.reload(Class_Sample) #外部クラスのインスタンス化 exampleClass = Class_Sample.ExampleClass() #引数 無し 実行 exampleClass.printHello() |
引数の指定が足りていないようです
呼び出し元の関数、第一引数に「self」を定義をしていないと
このようなエラーになってしまいます
まとめ:関数にはselfを定義すること
外部ファイルのクラスを呼び出す際に
関数の第一引数にselfを定義していないと
関数の実行ができません
知っていれば、「あっそんなことか!」で済むのですが
知らないと沼にはまります・・・
外部ファイルから関数を呼び出すことを想定して
関数の第一引数には必ず「self」を定義しておくのを癖にしておきましょ
コメント