Python 基于命令行参数动态调用类方法

Python 基于命令行参数动态调用类方法,python,string,Python,String,我需要根据命令行参数调用类方法 params = sys.argv[1].split('.') print params ['Abc', 'test'] suite.addTest(params[0](params[1])) Traceback (most recent call last): File "policy.py", line 407, in <module> suite.addTest(params[0](params[1])) TypeErro

我需要根据命令行参数调用类方法

params = sys.argv[1].split('.')

print params

['Abc', 'test']

suite.addTest(params[0](params[1]))

Traceback (most recent call last):
    File "policy.py", line 407, in <module>
    suite.addTest(params[0](params[1]))
TypeError: 'str' object is not callable
params=sys.argv[1]。拆分('.)
打印参数
[‘Abc’,‘测试’]
suite.addTest(参数[0](参数[1]))
回溯(最近一次呼叫最后一次):
文件“policy.py”,第407行,在
suite.addTest(参数[0](参数[1]))
TypeError:“str”对象不可调用

是它们调用类方法的任何方式。

在代码中,
参数[0]
仍然是字符串
'Abc'
。您需要将其转换为可以调用的类

假设类
Abc
位于模块
foo
中。那你就可以这么做了--


快速的方法是使用
eval
,它将获取字符串并在当前名称空间中对其求值。但是
eval
是邪恶的,因为您的程序输入可能看起来像:

eval(“os.remove('/'))
举个例子。Python还有一个全局语言词典,您可以使用它:

TestClass = globals()[params[0]]
suite.addTest(TestClass(params[1])

Abc
类定义在哪里?我使用类似于此套件的方法尝试了globals()。addTest(globals()[params[0]](globals()[params[1]])我在下面得到了错误“keyrerror:'test'”请参见下面的答案,不要使用globals()两次。params是调用类的参数,或者它是一个属性,在这种情况下,您可以执行
TestClass=globals()[params[0]]
,然后执行
getattr(TestClass,params[1])
TestClass = globals()[params[0]]
suite.addTest(TestClass(params[1])