我需要根据命令行参数
调用类方法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
他们是否可以调用类方法。
答案 0 :(得分:3)
在您的代码中,params[0]
仍然是字符串'Abc'
。您需要将其转换为可以调用的类。
假设类Abc
在模块foo
中。然后你可以这样做 -
import foo
MyTestClass = getattr(foo, params[0])
suite.addTest(MyTestClass(params[1])
答案 1 :(得分:0)
快速执行此操作的方法是使用eval
,它将获取字符串并在当前命名空间中对其进行评估。但是eval
是邪恶的,因为你的程序输入看起来像是:
eval("os.remove('/')")
仅作为一个例子。 Python还有一个你可以使用的全局变量字典:
TestClass = globals()[params[0]]
suite.addTest(TestClass(params[1])