Python3.5中如何访问driving_style方法变量并在testing类中使用
实现方案
你需要获取driving_style运行时的中间变量DriveDays、StopBy,可选择以下两种实现方式:
方案1:修改driving_style返回值(兼容性最好,改动最小)
调整driving_style的返回结构,将中间变量和原有返回值一起返回,原有调用逻辑仅需微调即可兼容,示例代码如下:
调整后的driving_style代码
def driving_style(date, modelDays, params): daystrade = params.daystrade high_low = params.high_low DriveDays = model.DateRange(date, params.daystrade) StopBy = ComputeData.instability(DriveDays) if high_low: style = ma.average(StopBy) else: style = ma.mean(StopBy) # 原返回值放第一位,后续追加需要对外暴露的中间变量 return style, DriveDays, StopBy
原有Volume类调用适配
仅需在调用时取第一个返回值,不影响原有业务逻辑:
def learning(self, data, rootClass): params.daystrade = self.daystrade params.high_low = self.high_low # 按参数定义传入对应入参,只取第一个返回值忽略中间变量 style, _, _ = Accuracy.driving_style(date, modelDays, params) return self.Object(data.universe, style)
test_score方法实现
直接调用driving_style取中间变量即可:
def test_score(date, modelDays, params): # 调用driving_style获取中间变量,忽略原有style返回值 _, DriveDays, StopBy = driving_style(date, modelDays, params) # 此处补充你自己的运算逻辑 test_score_result = 自定义运算逻辑(DriveDays, StopBy) return test_score_result
方案2:抽离公共计算逻辑(适合不想修改原有方法返回结构的场景)
把计算DriveDays、StopBy的逻辑抽成独立公共函数,driving_style和test_score都调用该函数获取变量,无需修改原有driving_style的返回结构:
# 抽离的公共计算函数 def calc_drive_base_params(date, params): DriveDays = model.DateRange(date, params.daystrade) StopBy = ComputeData.instability(DriveDays) return DriveDays, StopBy # 原有driving_style逻辑基本不变,仅替换变量获取部分 def driving_style(date, modelDays, params): daystrade = params.daystrade high_low = params.high_low DriveDays, StopBy = calc_drive_base_params(date, params) if high_low: style = ma.average(StopBy) else: style = ma.mean(StopBy) return style # test_score直接调用公共函数获取中间变量 def test_score(date, modelDays, params): DriveDays, StopBy = calc_drive_base_params(date, params) # 此处补充你自己的运算逻辑 test_score_result = 自定义运算逻辑(DriveDays, StopBy) return test_score_result
注意事项
你原有代码存在几处疏漏,调整时需要一并修复:
- BaseClass的
__init__方法中直接调用了self.B.log,但self.B没有定义赋值 - 调用
driving_style、test_score方法时需要按参数定义传入date、modelDays、params三个入参 params变量在Volume类的learning方法中没有定义,需要补充初始化逻辑
内容的提问来源于stack exchange,提问作者user2536176
相关产品推荐
相关产品推荐

