使用類內省

你可以使用類來模擬開關/案例結構。以下是使用類的內省(使用 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!