Python 将导入的函数映射到变量

Python 将导入的函数映射到变量,python,namespaces,Python,Namespaces,我从package import fizz,buzz中导入了一些函数,我想将它们从字符串arg映射到变量func class Whatever(object): def __init__(self, func_name='fizz'): try: self.func = vars()[func_name] except KeyError: print "Bad func_name" r

我从package import fizz,buzz中导入了一些函数
,我想将它们从字符串arg映射到变量
func

class Whatever(object):
    def __init__(self, func_name='fizz'):
        try:
            self.func = vars()[func_name]
        except KeyError:
            print "Bad func_name"
            raise

但是
vars()
只捕获本地名称空间,我不想允许访问
globals()
。有什么想法吗?或者我应该使用if-else逻辑吗?

您可以使用白名单。。。或者在这种情况下,一个“白色口述”


你可以用一个白名单。。。或者在这种情况下,一个“白色口述”


这可能就是您要寻找的:为什么不直接将函数传递给初始值设定项:
def\uuu init\uuz(self,func=fizz)
,但基本上,如果您想使用字符串访问全局范围之外的某个全局名称,那么您必须使用
全局值,甚至更糟,类似于
exec
eval
。谢谢,我会查看
exec
eval
。我还认为我可以创建一个类attr dict,将字符串映射到导入的函数。@juanpa.arrivillaga我没有直接传递函数b/c我没有让调用方导入函数,而是在定义类的地方导入函数。你是说这是坏的(或非ythonic的)?这可能就是你想要的:为什么不直接将函数传递给初始值设定项:
def\uuuu init\uuuz(self,func=fizz)
,但基本上,如果你想使用字符串访问全局范围之外的某个全局名称,那么你就必须使用
全局值,或者更糟,类似于
exec
eval
。谢谢,我会查看
exec
eval
。我还认为我可以创建一个类attr dict,将字符串映射到导入的函数。@juanpa.arrivillaga我没有直接传递函数b/c我没有让调用方导入函数,而是在定义类的地方导入函数。你是说这是不好的(或非音速的)?谢谢,这是我在上面的评论中提到的一个不错的选择。谢谢,这是我在上面的评论中提到的一个不错的选择。
class Whatever(object):

    allowed = { 'fizz':fizz, 'buzz':buz }

    def __init__(self, func_name='fizz'):
        try:
            self.func = self.allowed[func_name]
        except KeyError:
            print "Bad func_name"
            raise