Python 将导入的函数映射到变量
我从package import fizz,buzz中导入了一些函数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
,我想将它们从字符串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