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

Python类报错AttributeError: 'str' object has no attribute 'fd'如何解决

报错原因
  • 类加载阶段会直接执行类定义内的顶层代码,你在类定义中直接调用实例方法fundamental("Exchange"),此时还没有创建DATA类的实例,实例方法要求的第一个参数self没有被自动注入,你传入的字符串"Exchange"会被当成self参数传入方法,因此方法内调用self.fd时才会抛出str对象没有fd属性的错误。
  • fundamental方法依赖的self.ticker是实例属性,只有创建实例时才会被赋值,类加载阶段不存在该值,就算self的问题解决,也无法拿到正确的请求参数。
  • 把api_key、ts、fd、fo这些变量定义为类属性,多实例场景下如果有修改操作会引发共享变量冲突,不符合封装逻辑。
修复方案

将工具对象初始化、exchange和currency属性的赋值逻辑放到实例构造方法__init__中,在实例创建完成后再执行相关调用,修复后的代码如下:

import os
from alpha_vantage.timeseries import TimeSeries
from alpha_vantage.fundamentaldata import FundamentalData
from alpha_vantage.foreignexchange import ForeignExchange


class DATA:
    # 固定不变的API Key可作为类常量存放
    ALPHAVANTAGE_API_KEY = os.getenv("ALPHAVANTAGE_API_KEY")

    def __init__(self, name, ticker):
        self.name = name
        self.ticker = ticker
        # 实例初始化时创建Alpha Vantage对应的工具对象
        self.ts = TimeSeries(key=self.ALPHAVANTAGE_API_KEY, output_format="pandas")
        self.fd = FundamentalData(key=self.ALPHAVANTAGE_API_KEY, output_format="pandas")
        self.fo = ForeignExchange(key=self.ALPHAVANTAGE_API_KEY, output_format="pandas")
        # 实例属性初始化完成后调用方法获取对应基本面值
        self.exchange = self.fundamental("Exchange")
        self.currency = self.fundamental("Currency")
    
    def fundamental(self, category="Name"):
        """
        工具方法:根据分类获取基本面数据
        :param category: Alpha Vantage分类名称,字符串类型
        :return: 选中的基本面数据值
        """
        fundamental_data = self.fd.get_company_overview(symbol=self.ticker)
        fun_data = fundamental_data[0]
        fun_data = fun_data[category].values[0]
        return fun_data

使用示例:

# 实例化对象即可自动拉取对应数据
apple_data = DATA(name="苹果公司", ticker="AAPL")
print(apple_data.exchange)
print(apple_data.currency)

注意事项:

  • 需提前在运行环境中正确配置ALPHAVANTAGE_API_KEY环境变量,否则API调用会失败
  • Alpha Vantage免费版有调用频率限制,批量创建实例时需要控制调用间隔,避免被限流

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 13:51:02