J'ai un certain nombre de fonctions qui doivent être appelées à partir de divers fichiers importés.Comment passer une chaîne en tant qu'objet à getattr python
Les fonctions sont formated le long des lignes de celle-ci:
a.foo
b.foo2
a.bar.foo4
a.c.d.foo5
et ils sont passés à mon script comme une chaîne brute.
Je suis à la recherche d'un moyen propre pour exécuter ces derniers, avec des arguments, et d'obtenir le retour des valeurs
En ce moment j'ai un système désordonné de diviser les cordes puis les nourrir à droite getattr appeler, mais cela se sent sorte de maladroit et est très peu évolutif. Y at-il un moyen que je peux simplement passer la partie de l'objet de getattr en tant que chaîne? Ou une autre façon de faire cela?
import a, b, a.bar, a.c.d
if "." in raw_script:
split_script = raw_script.split(".")
if 'a' in raw_script:
if 'a.bar' in raw_script:
out = getattr(a.bar, split_script[-1])(args)
if 'a.c.d' in raw_script:
out = getattr(a.c.d, split_script[-1])(args)
else:
out = getattr(a, split_script[-1])(args)
elif 'b' in raw_script:
out = getattr(b, split_script[-1])(args)