如何创建含关键字‘class’成员的Python类(适配字典转类)
解决Pydantic BaseModel中使用Python关键字作为字段名的问题
因为class是Python的保留关键字,不能直接作为类属性名,你可以用Pydantic的字段别名功能来映射字典里的class键,下面是两种实用的解决方法:
方法一:使用Field别名定义字段
用合法的变量名(比如class_)代替关键字,通过Field(alias="class")指定它对应字典里的class键,实例化时直接传**my_dict即可:
from pydantic import BaseModel, Field class MyClass(BaseModel): class_: str = Field(alias="class") # 测试用字典 my_dict = {"class": "demo-class"} # 转换为类实例 my_class = MyClass(**my_dict) # 访问字段 print(my_class.class_) # 输出: demo-class # 如果需要序列化回原键名的字典 print(my_class.model_dump(by_alias=True)) # 输出: {'class': 'demo-class'}
方法二:兼容旧版Pydantic(v1)的写法
如果你用的是Pydantic v1,配置方式略有不同,但核心逻辑一样:
from pydantic import BaseModel, Field class MyClass(BaseModel): class_: str = Field(alias="class") class Config: allow_population_by_field_name = True # 允许同时通过字段名和别名赋值 my_dict = {"class": "demo-class"} my_class = MyClass(**my_dict) print(my_class.class_) # 输出: demo-class
注意:实例化后访问该字段时要用你定义的变量名(比如class_),如果需要输出带原键名的字典,记得用model_dump(by_alias=True)(v2)或dict(by_alias=True)(v1)。
内容的提问来源于stack exchange,提问作者Harry Boy
相关产品推荐
相关产品推荐

