如何通过名称动态调用对象上的函数? [复制]

Posted

技术标签:

【中文标题】如何通过名称动态调用对象上的函数? [复制]【英文标题】:How to invoke a function on an object dynamically by name? [duplicate] 【发布时间】:2011-04-26 11:53:12 【问题描述】:

在 Python 中,假设我有一个字符串,其中包含我知道特定对象将具有的类函数的名称,我该如何调用它?

即:

obj = MyClass() # this class has a method doStuff()
func = "doStuff"
# how to call obj.doStuff() using the func variable?

【问题讨论】:

我很好奇您为什么需要这样做。这听起来像你可能正在做一些艰难的事情。能详细说说你的情况吗? 我有一个 cli 应用程序,我想在其中接受来自命令行的命令,但不想执行以下操作:“if command = 'doThing' then obj.doThing() elseif command = 'someOtherThing' ... 等等。我想将方法​​添加到处理程序类,然后它们会自动在 cli 上可用 这样可以吗?这种方法在什么情况下不是一个好主意?我也有类似的情况,但我不确定我是否会走这条路。不知何故,我觉得如果我明确地使用分支会更清楚。你怎么看?谢谢! 【参考方案1】:

使用getattr 内置函数。见documentation

obj = MyClass()
try:
    func = getattr(obj, "dostuff")
    func()
except AttributeError:
    print("dostuff not found")

【讨论】:

这个链接也有上述问题gist.github.com/hygull/41f94e64b84f96fa01d04567e27eb46b的一个有用且重要的例子@

以上是关于如何通过名称动态调用对象上的函数? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何根据名称动态调用方法? [复制]

PHP里如何获取函数的调用者名称

如何获取动态创建的 Flash 舞台上的 MovieClip 名称?

如何复制动态分配的对象(具有一个类的 const 成员)

在 Freemarker 中使用动态生成的名称调用函数

在javascript中动态调用本地函数