独立函数放在全局好,还是归类到类里更好?
我接手了一段代码,这段代码里有一些独立的函数,每个函数都是针对一个国家代码的。例如:
def validate_fr(param):
pass
def validate_uk(param):
pass
我想创建一个类,把这些函数放在一起,并把代码整合成一个方法。不过这样做会破坏代码的内聚性。另一个选择是调用实例方法?
class Validator(object):
def validate(param, country_code):
# dispatch
可惜的是,Python没有开关语句(switch statement)。
更新:我还是不太明白为什么我应该把它们保留为模块中的全局函数。把它们放在类方法里似乎更整洁。
4 个回答
3
类的主要作用不是把函数放在一起,而是模块的工作。类里的函数应该是操作对象本身的方法(比如改变对象的状态,或者提供关于状态的信息等),或者是类方法,它们是针对类本身的(在Python中,类也是对象)。其实在Python中根本不需要静态方法,因为你可以直接在模块级别定义函数。正如人们所说的:简单比复杂好。
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)