我有一个Python模块,其中有多个函数,它应该根据用户输入调用不同的函数。例如,在我的代码中我有类似的内容:
if val == "X":
return foo.X(self)
elif val == "Y":
return foo.Y(self)
elif val == "Z":
return foo.Z(self)
else:
sys.exit("ERROR: value %s DNE"%(val))
有没有一种方法可以直接根据输入调用foo
模块中的python函数,而不需要多个if
语句?
最佳答案
使用getattr
:
class Foo:
def X(self): return 1
def Y(self): return 2
foo = Foo()
getattr(foo, 'X')()
1
这是有效的,因为函数也是对象的属性。然后可以正常调用该函数。
但请注意,您需要处理传递的字符串与 Foo
中的任何函数都不匹配的情况。在这种情况下,您可以将 getattr
与可选的第三个参数一起使用:
getattr(foo, 'abcd', lambda : None)()
# None
当未找到具有该名称的属性时,将返回 lambda。
关于python - 通过输入字符串引用Python函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56416675/