Python Language Utiliser l'introspection de classe


Exemple

Vous pouvez utiliser une classe pour imiter la structure de commutateur / cas. Ce qui suit utilise l'introspection d'une classe (en utilisant la fonction getattr() qui résout une chaîne dans une méthode liée sur une instance) pour résoudre la partie "case".

Ensuite, cette méthode d'introspection est associée à la méthode __call__ pour surcharger l'opérateur () .

class SwitchBase:
    def switch(self, case):
        m = getattr(self, 'case_{}'.format(case), None)
        if not m:
            return self.default
        return m

    __call__ = switch

Ensuite, pour le rendre plus joli, nous sous- SwitchBase classe SwitchBase (mais cela pourrait être fait dans une classe), et nous définissons ici tous les case comme des méthodes:

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!')

alors nous pouvons enfin l'utiliser:

>>> 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!