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

Python @property识别不到带下划线的_loader属性引发AttributeError问题

问题原因
  • 构造方法__init__内的执行顺序错误:你先执行了self._data = self._load_data(),调用_load_data方法时,方法内部访问了self.loader属性,该属性通过装饰器映射到实例变量self._loader,但此时self._loader还没有完成赋值。
  • self._loader = loader的赋值操作在加载数据逻辑之后,调用_load_data时self._loader尚未定义,因此触发属性不存在报错。
  • 你认为Python能识别self._data是误解:报错发生在self._data赋值的执行过程中,赋值操作还没完成,self._data实际上也没有完成初始化。
解决方法

调换__init__内两行代码的执行顺序,先完成self._loader的赋值,再执行数据加载逻辑即可,修正后的代码如下:

import typing
import pandas as pd

# 假设implements、DataLoader、GoogleCsvHandler均为你环境中已定义的对象
class Zones(implements(DataLoader)): 
    def __init__(self, loader: GoogleCsvHandler):
        # 先赋值_loader,再执行加载
        self._loader = loader
        self._data = self._load_data()
        
    @property
    def data(self) -> typing.OrderedDict:
        return self._data
    
    @property
    def loader(self) -> GoogleCsvHandler:
        return self._loader
        
    def _load_data(self):
        data = self.loader.load()
        return data
        
    def get_dataframe(self) -> pd.DataFrame:
        return pd.DataFrame()
    
    def validate(self) -> bool:
        return True

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 18:06:02