为何继承BaseModel的test_class调用TEST_VALUE会触发AttributeError?
Pydantic BaseModel类字段访问报错解决
问题原因
继承自BaseModel的类中定义的TEST_VALUE属于Pydantic实例字段,而非普通Python类属性。BaseModel会将这类字段存入内部元数据结构(而非类的直接属性集合),因此直接通过类名test_class.TEST_VALUE访问会触发AttributeError。
可行解决办法
1. 实例化后访问字段
创建类的实例,通过实例对象访问字段的默认值:
from pydantic import BaseModel class test_class(BaseModel): """load from env""" TEST_VALUE: str = "" # 实例化后访问 instance = test_class() print(instance.TEST_VALUE) # 输出:""
2. 直接读取模型元数据(无需实例化)
根据你使用的Pydantic版本,从模型的元数据结构中获取字段默认值:
- Pydantic v2:使用
model_fields属性
print(test_class.model_fields["TEST_VALUE"].default) # 输出:""
- Pydantic v1:使用
__fields__属性
print(test_class.__fields__["TEST_VALUE"].default) # 输出:""
3. 标记为类属性(跳过Pydantic字段处理)
如果需要将TEST_VALUE作为真正的类属性使用,用ClassVar标记,这样BaseModel不会将其识别为实例字段:
from pydantic import BaseModel from typing import ClassVar class test_class(BaseModel): """load from env""" TEST_VALUE: ClassVar[str] = "" # 直接通过类名访问 print(test_class.TEST_VALUE) # 输出:""
内容的提问来源于stack exchange,提问作者palash
相关产品推荐
相关产品推荐

