You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

创建新类时如何在循环中迭代实例化继承类 实例返回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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 02:09:03