2011-06-16 33 views
2

我已經繼承了代碼,其中有獨立的功能,每個國家代碼一個。例如。在全局變量中使用獨立函數還是將它們組合到一個類中會更好?

def validate_fr(param): 
    pass 

def validate_uk(param): 
    pass 

我的想法是創建一個類,將它們組合在一起並將代碼合併到一個方法中。不幸的是,這破壞了凝聚力。另一個選擇是派遣實例方法?

class Validator(object): 
    def validate(param, country_code): 
     # dispatch 

唉,python沒有switch語句。

更新:我仍然不相信爲什麼我應該把它們作爲我的模塊中的全局函數。把它們作爲類方法看起來更清潔。

+0

更正到PEP8的間距 – 2011-06-16 08:16:17

回答

1

如果你想有一套功能把它們放在單獨的模塊。

3

你不需要switch語句。

validators = { 
    'fr': Validator(...), 
    'uk': Validator(...), 
    ... 
} 

... 

validators['uk'](foo) 
4

我會保留在模塊級別的功能 - 如果你不想實例化它,不需要類。

def validate_fr(param): 
    pass 

def validate_uk(param) 
    pass 

validators = {"fr": validate_fr, 
       "uk": validate_uk} 

def validate(country_code, param): 
    return validators[country_code](param) 

鑑於命名方案,你也可以做到這一點沒有字典:

def validate(country_code, param): 
    return gloabls()["validate_" + country_code](param) 
2

類並不意味着組功能整合在一起,模塊的switch語句可以很容易地使用dicitonary模擬。類中的函數應該是對對象本身進行操作的方法(改變它的狀態,發佈關於狀態的信息等),或者類方法,但對於類本身(Python中的類也是對象)。在Python中甚至不需要靜態方法,因爲您可以在模塊級別上始終具有功能。正如他們所說:Flat is better than nested

相關問題