如果要在对象(包括导入的模块)上调用方法,则可以使用:
getattr(obj, method_name)(*args) # for this question: use t[i], not method_name
例如:
>>> s = 'hello'>>> getattr(s, 'replace')('l', 'y')'heyyo'如果您需要在当前模块中调用函数
getattr(sys.modules[__name__], method_name)(*args)
args要发送的参数列表或元组在哪里,或者您可以像其他任何函数一样在调用中将它们列出。由于您正在尝试在同一对象上调用另一个方法,因此请使用第一个方法
self代替
obj
getattr获取一个对象和一个字符串,并在对象中进行属性查找,如果存在则返回属性。
obj.x并
getattr(obj,'x')达到相同的结果。如果您想进一步研究这种反映,还可以使用
setattr,
hasattr和
delattr功能。
完全替代的方法:
在注意到此答案已引起广泛关注之后,我将针对您的工作提出一种不同的方法。我假设存在一些方法
def methA(*args): print 'hello from methA'def methB(*args): print 'bonjour de methB'def methC(*args): print 'hola de methC'
为了使每个方法都对应一个数字(选择),我构建了一个将数字映射到方法本身的字典
id_to_method = { 0: methA, 1: methB, 2: methC,}鉴于此,
id_to_method[0]()将调用
methA。它有两个部分,首先是
id_to_method[0]从字典中获取函数对象,然后
()调用它。我也可以
id_to_method[0]("whatever","args", "I", "want) 在您的真实代码中传递参数,鉴于上述情况,您可能会遇到类似choice = int(raw_input('Please make a selection'))id_to_method[choice](arg1, arg2, arg3) # or maybe no arguments, whatever you want


