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

Python3类开发中__init__变量传入实例方法报错问题求助

问题原因

你代码的执行顺序出错了:

  • 在__init__方法中,你先调用了self.stuff_max_equity(period),这时候self.max_equity_value还没有被实例化
  • 调用方法后才执行self.max_equity_value = 0的初始化操作,所以方法运行时访问self.max_equity_value就会抛出属性不存在的错误
修正方案
  1. 调整__init__里的代码顺序,先初始化self.max_equity_value,再调用stuff_max_equity方法
  2. 顺带修正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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 06:48:01