Invocation de fonctions de module avec dénomination dynamique des fonctions
Imaginez un scénario dans lequel vous devez appeler une fonction d'un module, mais la fonction le nom est généré dynamiquement, stocké sous forme de chaîne. Cela soulève la question : comment cela peut-il être réalisé par programme ?
Invocation de fonction dynamique en utilisant le module et le nom de la fonction comme chaînes
La solution à ce défi réside dans la fonction getattr de Python . getattr prend un objet et une chaîne représentant un nom d'attribut (ou de méthode) et renvoie la valeur de l'attribut. En appliquant ce concept aux modules, vous pouvez appeler leurs fonctions en passant la référence du module et le nom de la fonction sous forme de chaînes.
Considérez l'exemple suivant :
import foo func_name = "bar" bar = getattr(foo, func_name) result = bar()
Dans cet exemple, le module foo contient une barre de fonctions. En utilisant getattr, on récupère la fonction bar en passant le module foo et la chaîne "bar". Enfin, nous invoquons bar et stockons sa valeur de retour dans le résultat.
Au-delà des fonctions : invocation dynamique de méthodes de classe
la polyvalence de getattr s'étend au-delà de l'invocation de fonctions au niveau du module . Il peut également être utilisé pour accéder aux méthodes liées à une instance de classe, aux méthodes au niveau du module, aux méthodes de classe, etc.
Exemple d'invocation de méthode de classe :
class MyClass: @classmethod def classmethod_foo(cls, arg): pass my_class_instance = MyClass() classmethod_foo = getattr(my_class_instance, "classmethod_foo") classmethod_foo(arg)
Cet exemple démontre l'invocation dynamique de la méthode de classe classmethod_foo sur une instance de MyClass.
Remarque :
Les versions 3.10 et ultérieures de Python introduisent le nouvel alias getattr getattrs, qui offre une flexibilité et une commodité supplémentaires pour accéder dynamiquement aux attributs.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!