J'ai quelques fonctions importées from package import fizz, buzz
et je veux les mapper à une variable func
à partir d'un argument chaîne.Carte importé fonction à une variable
class Whatever(object):
def __init__(self, func_name='fizz'):
try:
self.func = vars()[func_name]
except KeyError:
print "Bad func_name"
raise
Mais vars()
capture que l'espace de noms local, et je ne veux pas permettre l'accès à globals()
. Des idées? Ou devrais-je juste aller avec la logique d'if-else?
Cela pourrait être ce que vous cherchez: https://docs.python.org/3 /library/functions.html#exec –
Pourquoi ne pas passer la fonction * directement * à l'initialiseur: 'def __init __ (self, func = fizz)' –
Mais fondamentalement, si vous voulez accéder à un nom global en dehors du global scope en utilisant une chaîne, alors vous avez en quelque sorte * have * pour utiliser 'globals', ou pire, quelque chose comme' exec' ou 'eval'. –