私は物事のリストを持っていますが、私は例としてファイルを使用します。各タイプのファイルは、異なる方法で処理する必要があります。私はクラス「MyFile」を作成し、巨大なif:elif:else:structureを維持するのではなく、ファイルタイプをキーとして辞書を作成しました。これはクラス変数として格納されます。メソッドから返されたオブジェクトメソッドをメソッド変数として呼び出す
class MyFile(object):
def process_xlsx(self):
#process file stuff for Excel
pass
def process_docx(self):
#process file stuff for Word
pass
def get_filetype(self):
try:
return self.FileTypes[file_extension]
except KeyError:
return None #filetype not handled... yet
FileTypes = {
"XLSX": ("Excel File", process_xlsx),
"DOCX": ("Word Document", process_docx)
}
異なるクラス/オブジェクト/モジュール内で、MyFileクラスをインスタンス化し、ファイルをステップ実行します。 MyFileオブジェクトは正しく作成されます。
f = MyFile("full_file_path_and_name")
file_type = f.get_filetype()
file_typeには、キーと関数オブジェクトのタプルがあります。次に例を示します。 xls_0386.xlsx - ( 'Excelファイル'、) doc_0386.docx - ( 'Wordファイル'、)
質問:私はf.get_filetypeから返された関数を呼び出すにはどうすればよいです( )?
file_type[1]()
戻り値:process_xlsx(1つの)必要な位置引数が不足して: '自己'
file_type[1]
にエラーを作成していないが、実際にコール(ブレークポイントは、プロセス内に到達しません_を作ることはありません????メソッド)
このようにオブジェクトメソッドを呼び出す構文は何ですか?
私はこれが私の詳細で説明するためにちょっと畳み込まれていることを知っています。そのために私はお詫びします。
ありがとうございます。
ご存知のように、これは完全に機能しました。ありがとうございました。私はPythonの初心者ですが、私はまだいくつかの細部について頭を下ろそうとしています。これは私のためにまだ別のものを埋める。 また、「部分」に関する追加情報をありがとうございます。私はこれ以上掘り下げていくつもりですが、私がどこに向かうと思ったのかは間違いありません。 多くの名声。 – billbris