如何使用带有函数名称的字符串调用函数?例如:
import foo
func_name = "bar"
call(foo, func_name) # calls foo.bar()
如何使用带有函数名称的字符串调用函数?例如:
import foo
func_name = "bar"
call(foo, func_name) # calls foo.bar()
当前回答
这些建议对我都没有帮助。但我确实发现了这一点。
<object>.__getattribute__(<string name>)(<params>)
我使用的是python 2.66
希望这有帮助
其他回答
给定带有方法栏的模块foo:
import foo
bar = getattr(foo, 'bar')
result = bar()
getattr可以类似地用于类实例绑定方法、模块级方法、类方法。。。名单还在继续。
关于这个问题,如何使用方法名分配给标记为与此重复的变量[重复]来动态调用类中的方法,我在这里发布了一个相关的答案:
场景是,一个类中的一个方法想要动态调用同一个类上的另一个方法,我在原始示例中添加了一些细节,这提供了更广泛的场景和清晰性:
class MyClass:
def __init__(self, i):
self.i = i
def get(self):
func = getattr(MyClass, 'function{}'.format(self.i))
func(self, 12) # This one will work
# self.func(12) # But this does NOT work.
def function1(self, p1):
print('function1: {}'.format(p1))
# do other stuff
def function2(self, p1):
print('function2: {}'.format(p1))
# do other stuff
if __name__ == "__main__":
class1 = MyClass(1)
class1.get()
class2 = MyClass(2)
class2.get()
输出(Python 3.7.x)功能1:12功能2:12
基于Patrick的解决方案,要动态获取模块,请使用以下方法导入:
module = __import__('foo')
func = getattr(module, 'bar')
func()
你的意思是从模块中获取指向内部函数的指针
import foo
method = foo.bar
executed = method(parameter)
这并不是一种更好的蟒蛇方式,对于准时的情况确实是可能的
还没有人提到operator.attrgetter:
>>> from operator import attrgetter
>>> l = [1, 2, 3]
>>> attrgetter('reverse')(l)()
>>> l
[3, 2, 1]
>>>