独立函数放在全局好,还是归类到类里更好?

4 投票
4 回答
2519 浏览
提问于 2025-04-16 19:40

我接手了一段代码,这段代码里有一些独立的函数,每个函数都是针对一个国家代码的。例如:

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)

撰写回答