python - 通过输入字符串引用Python函数

标签 python python-3.x module

我有一个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/

相关文章:

python - 在Python中生成特定的排列模式

python - 如何将 execution_date 作为纪元时间?

python-3.x - sys.intern() 做什么以及何时使用?

TypeScript:默认值不是构造函数

vue.js - 注册 Vuex 模块的问题,要么找不到命名空间,要么 getters.default 为空

Python:在生成器对象上调用 list() 会产生不正确的结果

python - 创建随机索引为零的张量

python - 正则表达式 : Finding alpha numeirc sub-strings but not strictly alphabetic and might be fully numeric

python - 兼容性问题(python 2 与 python 3)

python-3.x - 如何直接将python模块安装到dist-packages目录中?