2012-03-13 21 views
0

Pythonで定義の中にあるメソッドの辞書があります。このdefは、オブジェクトを使用してクラスの外部で呼び出されます。 defが呼び出されるたびに、辞書の最後の項目の結果が返されます。この場合、私はdef spc_summary:の結果を返します。Pythonで辞書の値を取り出す方法は?

def setStyles(self): 
    # Assign function to file 
    functions = { 
      'app_server.php':self.app_server(), 
      'dcrm2nlyte.php':self.dcrm2nlyte(), 
      'export.php':self.export(), 
      'host_server.php':self.host_server(), 
      'spc.php':self.spc(), 
      'spc_approved.php':self.spc_approved(), 
      'spc_approved_by_dc.php':self.spc_approved_by_dc(), 
      'spc_by_dc.php':self.spc_by_dc(), 
      'spc_complete.php':self.spc_complete(), 
      'spc_summary.php':self.spc_summary() 
    } 

    filename = self.phpfile 
    functions.get(filename) 

誰かがここで何が起こっているのか説明できますか?詳細が必要な場合はお知らせください。ありがとう!

詳細を追加してみましょう: functions.get(filename)は、ファイル名が何であるかに関わらず最後の辞書項目を取り戻しています。私はこれをしました=>functions('spc.php')と `def spc_summary 'の結果を返しました。そして、それらのdefのは同じ結果を持ってはいけません。

+0

'functions'辞書の目的は何ですか? 'phpfile'の中に名前が格納されている関数を呼び出そうとしていますか? – hochl

+5

'' spc_summary.php ':self.spc_summary() '行は、' 'spc_summary.php':self.spc_summary'や' functions.get(filename) 'のような括弧を使わずに' 'functions.get (filename)() ' –

+0

ええ、それぞれのメソッド呼び出し**で辞書を構築している間に、それらのメンバ関数を効果的に呼び出すことができます。 – hochl

答えて

2

あなたの関数dictは間違ったことをしているようです。あなたの辞書を定義している間、関数オブジェクトの代わりに関数結果にキーをマッピングしています。あなたが機能オブジェクト機能にマッピングした場合、あなたがfunctions.get(filename)()

はあなたのdictのは、おそらく以下のようにする必要があり呼び出すときに呼び出される:

functions = { 
     'app_server.php':self.app_server, 
     'dcrm2nlyte.php':self.dcrm2nlyte, 
     'export.php':self.export, 
     'host_server.php':self.host_server, 
     'spc.php':self.spc, 
     'spc_approved.php':self.spc_approved, 
     'spc_approved_by_dc.php':self.spc_approved_by_dc, 
     'spc_by_dc.php':self.spc_by_dc, 
     'spc_complete.php':self.spc_complete, 
     'spc_summary.php':self.spc_summary 
} 
0

辞書が順序付けられていないので、最後のオブジェクトは、辞書を反復処理から返されますおそらく、その辞書に挿入された最後の項目ではないでしょう。

functions.get(filename)は、現在の値filenameを使用して、functionsで検索します。 filenameself.phpfileからその値を取得するので、あなたの例ではself.phpfileは 'spc_summary.php'に設定する必要があります。

関連する問題