如何扩展FHIR类?Python扩展Patient类报错求助
解决FHIR Patient类扩展时的Pydantic字段错误
你遇到的问题根源是FHIR的Patient类基于Pydantic的BaseModel实现,而BaseModel默认会严格校验对象的所有属性——只有在模型中显式声明过的字段才能被赋值,直接在__init__里添加未定义的validDia会触发字段校验失败。
下面提供两种可行的解决思路:
方法1:显式声明扩展字段(推荐)
在子类中用Pydantic的语法声明validDia字段,这样既符合Pydantic的规范,也能保留字段类型校验:
import fhir.resources.patient as pt from pydantic import Field class Patient2(pt.Patient): # 声明validDia为必填整数字段,可根据需求修改类型或添加默认值 validDia: int = Field(...) # 实例化时直接传入validDia,同时支持Patient类的其他参数 newPatient = Patient2(validDia=1) print(newPatient.validDia)
方法2:允许额外字段(适合快速临时扩展)
如果不需要对扩展字段做类型校验,可以通过配置model_config允许模型接受未声明的额外字段:
import fhir.resources.patient as pt class Patient2(pt.Patient): # 配置允许额外字段 model_config = {"extra": "allow"} def __init__(self, validDia, **kwargs): # 先调用父类构造方法初始化Patient的原有字段 super().__init__(**kwargs) # 再赋值扩展字段 self.validDia = validDia # 实例化示例 newPatient = Patient2(1) print(newPatient.validDia)
注意:如果需要从JSON文件解析后添加扩展字段,建议先解析得到Patient实例,再通过上述方法转换为子类实例,或者直接给实例动态添加属性(需确保模型允许额外字段)。
内容的提问来源于stack exchange,提问作者Rakesh
相关产品推荐
相关产品推荐

