在全局变量中使用独立函数或将它们分组到类中是否更好?

时间:2011-06-16 07:57:13

标签: python class-design

我继承了代码,其中有独立的函数,每个国家/地区代码一个。 E.g。

def validate_fr(param):
    pass

def validate_uk(param):
    pass

我的想法是创建一个类来将它们组合在一起并将代码合并到一个方法中。不幸的是,它打破了凝聚力。另一个选择是调度实例方法吗?

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

唉,python没有switch语句。

更新:我仍然不相信为什么我应该将它们作为我的模块中的全局函数。将它们作为类方法集中来看似乎更清晰。

4 个答案:

答案 0 :(得分:4)

我会将函数保留在模块级别 - 如果您不想实例化它,则不需要类。可以使用dicitonary轻松模拟switch语句:

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)

答案 1 :(得分:3)

您不需要切换语句。

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

 ...

validators['uk'](foo)

答案 2 :(得分:2)

如果您想要一组功能,请将它们放在单独的模块中。

答案 3 :(得分:2)

类不是要将函数组合在一起,模块是。类中的函数应该是对对象本身进行操作的方法(更改它的状态,发出有关状态的信息等)或者执行相同操作的类方法,但是对于类本身(Python中的类也是对象)。在Python中甚至不需要静态方法,因为你总是可以在模块级别拥有函数。正如他们所说:Flat is better than nested