使用类内省
你可以使用类来模拟开关/案例结构。以下是使用类的内省(使用 getattr()
函数将字符串解析为实例上的绑定方法)来解析 case
部分。
然后,内省方法使用 __call__
方法别名来重载 ()
运算符。
class SwitchBase:
def switch(self, case):
m = getattr(self, 'case_{}'.format(case), None)
if not m:
return self.default
return m
__call__ = switch
然后为了使它看起来更好,我们将 SwitchBase
类子类化(但它可以在一个类中完成),并且我们将所有 case
定义为方法:
class CustomSwitcher:
def case_1(self):
return 'one'
def case_2(self):
return 'two'
def case_42(self):
return 'the answer of life, the universe and everything!'
def default(self):
raise Exception('Not a case!')
那么我们最终可以使用它:
>>> switch = CustomSwitcher()
>>> print(switch(1))
one
>>> print(switch(2))
two
>>> print(switch(3))
…
Exception: Not a case!
>>> print(switch(42))
the answer of life, the universe and everything!