Appeler une fonction à partir d'un nom de chaîne en Python

  1. Utilisez getattr() pour assigner une fonction à une variable en Python
  2. Utilisation de locals() et globals() pour appeler une fonction à partir d’une chaîne de caractères en Python

Ce tutoriel présente la façon d’appeler une fonction en utilisant son nom au format chaîne de caractères en Python.

Le cas d’utilisation pour ce problème est d’assigner une fonction d’un module ou d’une classe à une variable pour n’importe quelle utilisation qu’elle peut avoir.

Utilisez getattr() pour assigner une fonction à une variable en Python

La fonction getattr() retourne une valeur d’un attribut d’un objet ou d’un module. Cette fonction a deux arguments obligatoires, le premier argument est le nom de l’objet ou du module, et le second est une valeur de chaîne de caractères qui contient le nom de l’attribut.

L’attribut en question peut être sous la forme d’une variable, d’une fonction ou d’une sous-classe.

Supposons que nous ayons une classe nommée User avec les attributs donnés :

# Filename: user.py
class User():
  name = 'John'
  age = 33
  def doSomething():
    print(name + ' did something.')

Maintenant, nous voulons stocker la fonction d’attribut doSomething() dans une méthode et l’appeler. Pour ce faire, nous utiliserons la fonction getattr().

from user import User as user

doSomething = getattr(user, 'doSomething')

doSomething(user)

Production :

John did something.

Maintenant, la fonction user.doSomething() est enveloppée dans la variable doSomething. De cette façon, l’objet user n’a pas besoin d’être spécifié pour appeler la fonction.

Utilisation de locals() et globals() pour appeler une fonction à partir d’une chaîne de caractères en Python

Une autre façon d’appeler une fonction à partir d’une chaîne de caractères est d’utiliser les fonctions intégrées locals() et globals. Ces deux fonctions retournent un dictionnaire Python qui représente la table de symboles actuelle du code source donné.

La différence entre les deux fonctions est l’espace de noms. Comme les noms l’indiquent, locals() retourne un dictionnaire incluant des variables locales et globals() retourne un dictionnaire incluant des variables locales. Les noms des fonctions sont également renvoyés dans le format de la chaîne de caractères.

Mettons ces méthodes dans un exemple. Déclarez 2 fonctions aléatoires et appelez-la en utilisant les deux fonctions intégrées.

def myFunc():
    print('This is a function.')

def myFunc2():
    print('This is another function.')

locals()['myFunc']()
globals()['myFunc2']()

Production :

This is a function.
This is another function.

En résumé, pour appeler une fonction à partir d’une chaîne de caractères, les fonctions getattr(), locals(), et globals() sont utilisées. La fonction getattr() vous demandera de savoir dans quel objet ou module la fonction se trouve, tandis que les fonctions locals() et globals() localiseront la fonction dans son propre champ d’application.

Article connexe - Python String

  • Comment supprimer les espaces dans une chaîne de caractères en Python
  • Comment obtenir une sous-chaîne d'une chaîne en Python