python 为什么要用接口,用了接口相应的控制层以及测试的写法思路

1)当前需要判断4个模型特征全为0的时候,统一做处理:比如统一输出信息不足,不做预测;

首先,可以做一个接口,判断features_dto,以字典的形式,判断是否类型为int或float型,然后求和,求和为0就表示全部为0;
公共接口:
from abc import abstractmethod
class IFeatureDo(object):
    """
    特征层接口
    """
    @abstractmethod
    def get_features(self):
        """
        获取特征集
        """
然后在失信模块中运用它:
class ShinXinFeaturesDealDo(IFeatureDo):
    def __init__(self, features, enterprise_code=None, result_code=None, industry_code=None, enterprise_status=None, is_shi_xin = None,shixin_cnt = None):
        self.features = features
        self.enterprise_code = enterprise_code
        self.enterprise_status = enterprise_status
        self.industry_code = industry_code
        self.result_code = result_code
        self.is_shi_xin = is_shi_xin
        self.shixin_cnt = shixin_cnt
    def get_features(self): #接口继承
        return self.features

然后,需要在控制层判断是否全为0,如下:
失信控制层的情况:
class BizShixinController(BizSingleControllerBase):
class BizSingleControllerBase(BaseBizController):

因为要实现(1)的逻辑,因此,需要添加公共的特征全为0判断逻辑,添加公共的判断逻辑原则上可以在BizSingleControllerBase上添加,也可以在BaseBizController添加,可以看到,公共的判断逻辑需要输入features_dto,而features_dto是通过BizSingleControllerBase得到的,因此,添加在BizSingleControllerBase中,如果添加在BaseBizController中,BaseBizController是位于BizSingleControllerBase下层,是他的基类(也叫父类),由于下层不能调用上层,因此,输入features_dto无法获取,因此不满足;

公共的特征全为0判断逻辑:
def _is_all_features_zero(self, features_dto):
        """
        是否features的全部特征都为零
        """
        if isinstance(features_dto, IFeatureDo):
            features_count = Stream(features_dto.get_features().__dict__.values()) \
                .filter(lambda x: isinstance(x, (int, float))) \
                .sum()
            return features_count == 0
        else:
            raise BizException(u'未实现指定接口')


规则:
基类与上层类的关系
mock测试找原因的方法:看为什么满足条件,一步一步跟踪,

测试,不要多重覆盖,难以维护,测试的条件可以写特征全为0和不全为0,但是测试的时候,只用写专门覆盖特征全为0的脚本,因为其他正常预测等已经本事都是特征不全为0了,所以不用再专门写特征不全为0的测试脚本了;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值