我正在用Python编写一个测试自动化工具。该工具的一个关键特性是通过具有各种签名的名称来调用方法,就像C#反射所做的那样。然而,在阅读了一堆文章并做了几次测试之后,我却没能找到处理各种签名的方法。在
这是我的第一个想法-
def invoke(obj, method_name, *args):
print type(args)
method = getattr(obj, method_name)
method(*args)
import sys
module = sys.modules[__name__]
invoke(module, 'foo', 1, 2)
确实有用。但问题是,用它们的名字调用的方法可以有不同数量的参数。然后我想pararmeter列表可以用元组表示,因为args的类型是tuple。所以我修改了最后一行代码-
^{pr2}$但是翻译告诉我-
Traceback (most recent call last):
File "\Src\studies\dynamic_method_call.py", line 14, in <module>
invoke(module, 'foo', (1, 2))
File "\Src\studies\dynamic_method_call.py", line 9, in invoke
print method(*args)
TypeError: foo() takes exactly 2 arguments (1 given)
我还试过list,和keywored args。他们两个都没用。请指教!在
invoke(module, 'foo', (1, 2))
扩展为foo((1, 2))
,因此args
是{foo
,因此会出现错误。在或者使用:
或者
^{pr2}$为了“解包”一组值作为函数调用的参数,只需使用
*
,例如:相关问题 更多 >
编程相关推荐