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

时间:2014-05-08 14:04:25

标签: 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]))
TypeError: 'str' object is not callable

他们是否可以调用类方法。

2 个答案:

答案 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])