如何解决Pydantic模型类方法返回类属性时的AttributeError?
解决Pydantic BaseModel类方法访问字段默认值的AttributeError问题
问题原因
Pydantic的BaseModel中定义的字段(比如llm_model: str = 'gpt-4')不是类级属性,而是存储在模型的元数据配置里,并非直接挂载在类本身。所以直接通过cls.llm_model访问会触发AttributeError,只有实例化模型后,字段才会成为实例的属性。
解决方案
方案1:通过模型字段配置获取默认值(推荐)
Pydantic v2版本可使用cls.model_fields访问字段元数据,从中提取默认值:
from pydantic import BaseModel class ExtractionModel(BaseModel): llm_model: str = 'gpt-4' @classmethod def create_llm(cls): return cls.model_fields['llm_model'].default print(ExtractionModel.create_llm()) # 输出: gpt-4
如果是Pydantic v1版本,替换为cls.__fields__即可:
return cls.__fields__['llm_model'].default
方案2:在类方法中创建实例访问属性
若逻辑允许,也可在类方法内创建模型实例,再访问实例属性:
from pydantic import BaseModel class ExtractionModel(BaseModel): llm_model: str = 'gpt-4' @classmethod def create_llm(cls): instance = cls() return instance.llm_model print(ExtractionModel.create_llm()) # 输出: gpt-4
这种方法适合需要验证字段默认值有效性的场景,但相比方案1多了实例化的开销。
内容的提问来源于stack exchange,提问作者Eric
相关产品推荐
相关产品推荐

