我正在尝试创建一种在主程序中调用泛型子类的方法,其中可以从中选择的特定子类可以具有唯一的输入参数。你知道吗
我有一个主程序,主.py,将给定测试的结果与基本模型的结果进行比较。不同的测试是存储在模块中的子类测试.py. 我正在尝试找出调用中任何给定测试(子类)的最佳方法主.py通过提供命令行输入参数。(每个子类可以有不同数量的参数,有些参数由配置文件提供。)
我目前的方法是可行的,但感觉很笨拙,应该有更好的方法:
在主程序中,主.py,我使用字典选择所需的子类:
test_case = tests.select_subclass(case)
(下面的函数示例)
在哪里
tests.py
是包含各种子类的模块,函数select_subclass;
case
在命令行中作为输入参数提供
我使用eval
初始化给定的测试用例:
test = eval(test_case)
然后使用给定子类中的run函数根据需要运行函数:
test.run(x, y)
其中x
和y
是每个子类的run函数中需要的两个变量。你知道吗
在tests.py
中
def select_subclass(key):
subclss_dict = {
‘Test1’: ‘tests.Test1(in1, in2)’
‘Test2’: ‘tests.Test2(config.getint(“test2”, “intvar1”),'
'config.getint(“test2”, “intvar2”), in1, in2)’
‘Test3’: ‘tests.Test3(config.get(“test3”, “var1”),'
'config.getint(“test3”, “intvar”),'
'config.get(“test3”, “var2”), in1, in2)’
}
从ini配置文件中读取某些子类的输入变量。你知道吗
我使用的是python2.7
我仍然习惯于有效地使用类,任何关于如何更干净/更好地使用类的建议都将不胜感激。你知道吗
在与一位同事讨论之后,他提出了一种更干净、更简单的方法:
使子类模块化:测试.py只能容纳基类。每个子类都将是自己的模块(并且导入测试以便继承基类)。
将测试模块动态导入到主.py地址:
实例化实例:
其中
get_input()
是每个子类中的一个函数,它为给定的测试用例获取必要的输入参数:(例如,对于Test2子类)
和
config = ConfigParser.RawConfigParser()
相关问题 更多 >
编程相关推荐