2016-11-15 8 views
-1

私はドキュメントとGoogle検索を調べてみましたが、メソッドの最後に[clazz]の意味を見つけることができません。メソッドの終わりに誰かが[clazz]の意味を理解するのを助けることができますか?ありがとう。Pythonのメソッドから関数を返す

def get_context_setter(context, clazz): 
     return { 
      int: context.setFieldToInt, 
      datetime: context.setFieldToDatetime 
     }[clazz] 

setFieldToIntとsetFieldToDatetimeは、コンテキストクラス内のメソッドです。

+0

辞書を作成していて、すぐに 'clazz'引数として渡されたキーにアクセスしているようです。 –

+0

それは 'int'クラスまたは' datetime'クラスに渡し、そのコンテキストとクラスのコンストラクタを返します。 –

+0

申し訳ありません、私は今理解しています。 –

答えて

1

この関数は、2つのうちの1つを返します。 context.setFieldToIntまたはcontext.setFieldToDatetimeのいずれかを返します。これは、他のプログラミング言語のswitchステートメントと同じように、辞書を使用することによって行われます。

clazzがクラスintへの参照かクラスdatetimeへの参照かどうかを確認し、適切な方法を返します。

それは、このコードと同じです:代わりにswitch文の辞書を使用して

def get_context_setter(context, clazz): 
    lookup_table = {int: context.setFieldToInt, 
        datetime: context.setFieldToDatetime 
        } 
    context_function = lookup_table[clazz] # figure out which to return 
    return context_function 

はかなり人気があり、Replacements for switch statement in Python?を参照してください。

0

もっと簡潔に。 提示されたコードでは、オブジェクトのクラスがclazzという名前のパラメータとして期待されています。 それはそのクラスを辞書のキーとして使用しています。 彼らは基本的に2つの異なる型を受け入れ、オブジェクト型のメソッドを呼び出そうとしています。

classはPythonのキーワードです。 あなたが表示するコードの作成者は、obj_classのようなより長いsnake_caseパラメータ名の代わりに、奇妙なスペルを使用することを選択しました。 パラメータが本当にさらに良い

instance_class OBJ、obj_class または 例えば、命名されている必要があり、クラスは本当に別のパラメータである必要はありません。