如何正确编写关联类?实现A、B类共享模型测试方法
解决方案:提取公共测试方法到父类,让A、B继承
核心思路是把test1_on_model、test2_on_model这类重复的测试逻辑抽离到一个公共父类中,让类A和类B都继承这个父类,这样两个类的实例就能直接调用这些测试方法,无需重复编写代码。
1. 定义公共测试父类
创建一个包含所有测试方法的基类,只要子类实例拥有self.model属性,就能直接使用这些方法:
class ModelTester: def test1_on_model(self): ### 这里写通用的test1测试逻辑,直接访问self.model即可 print(f"执行test1,测试模型: {self.model}") def test2_on_model(self): ### 这里写通用的test2测试逻辑 print(f"执行test2,测试模型: {self.model}")
2. 让A、B类继承公共父类
修改类A和类B,继承ModelTester,同时保留各自的初始化逻辑:
def process_data(data): ### 数据处理逻辑,返回Model对象 return Model() # 假设Model是已定义的目标类 class A(ModelTester): def __init__(self, data) -> None: self.model = process_data(data) class B(ModelTester): def __init__(self, model) -> None: self.model = model
3. 调用测试方法
现在A和B的实例都能直接调用测试方法:
# 测试类A raw_data = {"key": "value"} a = A(raw_data) a.test1_on_model() a.test2_on_model() # 测试类B preprocessed_model = process_data(raw_data) b = B(preprocessed_model) b.test1_on_model()
4. 子类扩展测试方法(可选)
如果某个子类需要在通用测试逻辑基础上添加个性化步骤,可以重写方法并通过super()调用父类的通用逻辑:
class A(ModelTester): def __init__(self, data) -> None: self.model = process_data(data) def test1_on_model(self): # 先执行父类的通用测试 super().test1_on_model() # 添加类A特有的测试步骤 print("执行类A专属的额外测试逻辑")
内容的提问来源于stack exchange,提问作者Mirko
相关产品推荐
相关产品推荐

