74 votes

Comment appeler des fonctions Python de manière dynamique

J'ai ce code :

fields = ['name','email']

def clean_name():
    pass

def clean_email():
    pass

Comment puis-je appeler clean_name() y clean_email() dynamiquement ?

Par exemple :

for field in fields:
    clean_{field}()

J'ai utilisé les accolades parce que c'est ainsi que je le faisais en PHP, mais cela ne fonctionne évidemment pas.

Comment faire cela avec Python ?

1voto

Vlad Bezden Points 5024

Dans le cas où vous avez beaucoup de fonctions et un nombre différent de paramètres.

class Cleaner:
    @classmethod
    def clean(cls, type, *args, **kwargs):
        getattr(cls, f"_clean_{type}")(*args, **kwargs)

    @classmethod
    def _clean_email(cls, *args, **kwargs):
        print("invoked _clean_email function")

    @classmethod
    def _clean_name(cls, *args, **kwargs):
        print("invoked _clean_name function")

for type in ["email", "name"]:
    Cleaner.clean(type)

Sortie :

invoked _clean_email function
invoked _clean_name function

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X