2016-11-15 74 views
-1

我已經試過尋找文檔和谷歌搜索,但我無法找到在方法結束[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

該函數返回兩件事之一。它返回context.setFieldToIntcontext.setFieldToDatetime。它通過使用字典作爲其他編程語言中的switch語句來實現。

它檢查clazz是否是對類int的引用或對類datetime的引用,然後返回相應的方法。

這等同於下面的代碼:

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 

使用字典而不是switch語句是很受歡迎,看Replacements for switch statement in Python?

0

更簡要。 提出的代碼期望將某些對象的類作爲參數命名爲clazz。 然後使用該類作爲字典鍵。 他們本質上試圖接受兩種不同的類型,並在對象類型上調用方法。

class是Python中的關鍵字。 您顯示的代碼的作者選擇使用奇怪的拼寫而不是像obj_class這樣的更長的snake_case參數名稱。 參數真的應該被命名爲OBJ,obj_class 或者 例如,instance_class

更妙的是,類真的不需要單獨的參數。