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

如何在FastAPI中传入自定义类的列表?

解决FastAPI中传入自定义类列表时的"'my_class' object is not subscriptable"异常

问题根源

出现这个错误的核心原因有两个:

  • 自定义类my_class没有继承FastAPI依赖的pydantic.BaseModel,导致FastAPI无法将请求体的JSON数据解析为该类的实例,同时泛型类型注解处理出错。
  • 若使用Python 3.8及以下版本,直接使用List而未从typing模块导入,或者类型注解的写法不符合泛型要求。

正确实现步骤

  1. 让自定义类继承pydantic.BaseModel
    FastAPI依赖Pydantic做请求体的校验和解析,自定义类必须继承BaseModel才能被正确识别:

    from pydantic import BaseModel
    
    class MyClass(BaseModel):
        # 根据实际需求定义字段,比如:
        id: int
        content: str
    
  2. 正确使用类型注解

    • 如果你用的是Python 3.9及以上版本,可以直接用原生的list泛型:
      @router.post("/predict")
      async def predict(json_list: list[MyClass]) -> dict:
          # 这里json_list的每个元素都是MyClass的实例,可直接访问字段
          return {"total_items": len(json_list)}
      
    • 如果你用的是Python 3.8及以下版本,需要从typing模块导入List:
      from typing import List
      
      @router.post("/predict")
      async def predict(json_list: List[MyClass]) -> dict:
          return {"total_items": len(json_list)}
      

验证请求

发送POST请求到/predict时,请求体可以传如下格式的JSON数组:

[
    {"id": 1, "content": "test1"},
    {"id": 2, "content": "test2"}
]

FastAPI会自动将其解析为MyClass实例的列表,你可以直接在接口函数中使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 17:05:21