Python3类开发中__init__变量传入实例方法报错问题求助
问题原因
你代码的执行顺序出错了:
- 在
__init__方法中,你先调用了self.stuff_max_equity(period),这时候self.max_equity_value还没有被实例化 - 调用方法后才执行
self.max_equity_value = 0的初始化操作,所以方法运行时访问self.max_equity_value就会抛出属性不存在的错误
修正方案
- 调整
__init__里的代码顺序,先初始化self.max_equity_value,再调用stuff_max_equity方法 - 顺带修正
stuff_max_equity方法的逻辑问题:你当前的代码在第一次循环时无论判断结果如何都会直接return,后续的循环逻辑完全不会执行
修正后参考代码
import numpy as np trade_data = np.ones((20, 6)) class Stuff(): def __init__(self, period, period_division): self.period_division = period_division self.period = period # 先初始化实例属性 self.max_equity_value = 0 # 再调用方法 max_equity = self.stuff_max_equity(period) things = (1+1) other_things = (1+1) def stuff_max_equity(self, period): for n in range(period): # 若需要遍历数据建议将i修改为n,否则每次都取下标为1的元素 i = 1 if trade_data[i,5] > self.max_equity_value: self.max_equity_value = trade_data[i,5] # 循环全部跑完再返回结果 return self.max_equity_value
补充说明
类的所有实例属性只要通过self.属性名定义后,在类的任意方法中都可以直接通过self.属性名访问,不需要额外传参。你原来的调用逻辑是对的,只是初始化顺序错了。
内容的提问来源于stack exchange,提问作者coinmaster
相关产品推荐
相关产品推荐

