创建新类时如何在循环中迭代实例化继承类 实例返回None问题排查
问题修复方案
你代码存在三处核心错误,是导致list_orders元素全为None、逻辑无法运行的直接原因:
- 类继承逻辑冗余错误:Backtest是管理多个订单实例的容器,不属于Orders的子类,不需要继承Orders,多余的继承还会带来不必要的初始化逻辑冲突
- 实例创建方式完全错误:
Orders.__init__(self, ticker=self.tickers[i])是手动调用类的初始化方法,该方法本身无返回值(默认返回None),同时你将Backtest自身的self传入初始化方法,会反复覆盖Backtest实例本身的属性,完全达不到创建多个独立订单实例的效果 - 语法错误:现有代码的super调用参数错误,且最后一行print语句缺少右括号,运行会直接抛出语法异常
修正后代码
import pandas as pd class Orders: # 每个投资标的对应一个Orders实例 def __init__(self, ticker): self._long_position = None self._short_position = None self.ticker = ticker self.long_positions_df = pd.DataFrame(columns=['long', 'close']) self.short_positions_df = pd.DataFrame(columns=['short', 'close']) # 其余方法保留 class Backtest: # 移除不必要的Orders继承 def __init__(self, price_data, parameters, stock_series_one, stock_series_two, market_beta): self.price_data = pd.DataFrame() self.long_position = False self.short_position = False self.close_all = False self.parameters = parameters self.market_beta = market_beta # 两个标的的价格序列必须为pandas Series类型 self.stock_series_one = stock_series_one self.stock_series_two = stock_series_two self.tickers = [self.stock_series_one.name, self.stock_series_two.name] # 删掉错误的super调用 self.list_orders = [] for ticker in self.tickers: # 直接调用类构造器创建独立的Orders实例,添加到列表 order_obj = Orders(ticker=ticker) self.list_orders.append(order_obj) print('Stock : {} initiated'.format(order_obj.ticker))
修正说明
- 移除了冗余的Orders继承,避免父类初始化逻辑冲突
- 删除了参数错误、无意义的super调用
- 创建订单实例时直接调用
Orders(ticker),得到的实例对象存入list_orders,列表元素不再为None - 调整了循环写法,补全了print的右括号,修复语法问题
- 修正了print输出内容,直接打印标的代码更符合调试需求
内容的提问来源于stack exchange,提问作者cem
相关产品推荐
相关产品推荐

