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

Python类属性检测异常:WeeklyTransactionData的months属性报错

AttributeError: 'WeeklyTransactionData' object has no attribute 'months' 错误原因分析

问题描述

我编写了如下Python代码,定义了WeeklyTransactionData类,在__init__方法中初始化了self.months属性,但调用类中的getMonth方法时,触发了AttributeError错误,提示“'WeeklyTransactionData' object has no attribute 'months'”。

相关代码

class WeeklyTransactionData:
    def __init__(self, df):
        self.raw_levels = df['Weekly Consumer Spending Levels'].copy()
        self.raw_growth = df['Weekly Consumer Spending Growth'].copy()
        self.standardized_levels = self.level(self.raw_levels.copy())
        self.standardized_growth = self.growth(self.raw_growth.copy())
        self.lower_levels = self.lower(self.standardized_levels.copy())
        self.median_levels = self.med(self.standardized_levels.copy())
        self.upper_levels = self.upper(self.standardized_levels.copy())
        self.months = {'Jan': 1, 'Feb': 2, 'Mar': 3, 
        'Apr': 4, 'May': 5, 'Jun': 6, 
        'July': 7, 'Aug': 8, 'Sep': 9, 
        'Oct': 10, 'Nov': 11, 'Dec': 12}    

def getMonth(self, entry): # 该函数用于查找Growth表格式日期对应的月份
        abridged = entry[-10:]
        for i in self.months.keys():
            if i in abridged:
                return self.months[i]

def growth(self, df): # 清理Growth表数据
        last_month = self.getMonth(df.iloc[0][len(df.iloc[0])-1])
        print("Cleaning growth sheet")
        return df.reset_index(drop = True)

注:已删除growth函数中的保密代码块,核心逻辑为getMonth()方法的调用。

错误原因

核心问题是初始化顺序错误:

  • 在__init__方法中,你先调用self.growth(self.raw_growth.copy())初始化self.standardized_growth;
  • growth方法内部会调用getMonth,而getMonth需要访问self.months;
  • 但self.months是在__init__的最后一行才赋值的——当__init__执行到调用growth的步骤时,self.months还未被定义,因此getMonth访问self.months时就会抛出AttributeError。

解决办法

调整__init__内的属性赋值顺序,把self.months的定义移到所有会调用getMonth或依赖它的方法之前,确保后续方法执行时self.months已经存在。修改后的__init__示例:

def __init__(self, df):
    # 先定义self.months,保证后续方法能正常访问
    self.months = {'Jan': 1, 'Feb': 2, 'Mar': 3, 
    'Apr': 4, 'May': 5, 'Jun': 6, 
    'July': 7, 'Aug': 8, 'Sep': 9, 
    'Oct': 10, 'Nov': 11, 'Dec': 12}    
    self.raw_levels = df['Weekly Consumer Spending Levels'].copy()
    self.raw_growth = df['Weekly Consumer Spending Growth'].copy()
    self.standardized_levels = self.level(self.raw_levels.copy())
    self.standardized_growth = self.growth(self.raw_growth.copy())
    self.lower_levels = self.lower(self.standardized_levels.copy())
    self.median_levels = self.med(self.standardized_levels.copy())
    self.upper_levels = self.upper(self.standardized_levels.copy())

内容的提问来源于stack exchange,提问作者scerva

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 08:06:17