import re
import sys
import inspect
import testcases
testClass = re.compile(r'.*Case$')
testMethod = re.compile(r'.*Test$')
for class_name, class_obj in inspect.getmembers(testcases, inspect.isclass):
if testClass.match(class_name):
for method_name, method_obj in inspect.getmembers(class_obj, inspect.ismethod):
if testMethod.match(method_name):
# RIGHT HERE I WOULD LIKE TO INVOKE method_name
答案 0 :(得分:6)
在您的代码之后:
for class_name, class_obj in inspect.getmembers(testcases, inspect.isclass):
if testClass.match(class_name):
for method_name, method_obj in inspect.getmembers(class_obj, inspect.ismethod):
if testMethod.match(method_name):
# RIGHT HERE I WOULD LIKE TO INVOKE method_name
你可以这样做:
methodobj = getattr(classobj, method_name)
methodobj("appropriate arguments go here")
如果,也就是说,您对“适当的参数” 的内容有任何线索。第一个参数可能是该类的实例 - 哪个实例?你如何检索或创建它?而且,所有其他参数怎么样?它们是什么,你想为它们传递什么价值?
获取方法对象,随时可以调用,是你问题最少的问题 - getattr
,正如你所看到的那样,真的很好,也很容易! - ) - 但你需要明智的答案关于参数的上述其他问题(特别是第一个,你想要调用方法的实例)在你的问题实际上完全有意义之前! - )
答案 1 :(得分:0)
非常感谢alex快速回应。
第一个参数可能是该类的一个实例 - 哪个实例?你如何检索或创建它?
好吧,如果我理解正确的话,方法调用methodobj的第一个句子应该是classobj的一个实例?以下怎么样?
methodobj = getattr(classobj, method_name)
methodobj(classobj())
所有其他论点怎么样? 它们是什么,你想为它们传递什么价值?
Naaah,没有其他参数,这些是方法中带有set变量的测试用例。我只是想能够添加测试用例而无需修改其他代码以运行它们。
再次感谢,我还没有尝试过,但是从我读到的关于getattr的内容来看,它似乎正是我正在寻找的东西。随着一些游戏,我可以使它工作。