我有一长串要在电子邮件模板中使用的变量。
cust_name: str
bill_address: str
ship_address: str
ref_num: int
# ...list continues
这些的重叠组合出现在模板中,我使用 Pydantic 对其进行了建模。
class TemplateA(BaseModel):
cust_name: str
bill_address: str
class TemplateB(BaseModel):
cust_name: str
ref_num: int
class TemplateC(BaseModel):
bill_address: str
ship_address: str
# ...and so on
我想知道是否有推荐的方法来集中定义我的
variable: type
组合,这样我就不会重复自己,如果我更改变量名称或类型,这些更改会反映在各处。
Pydantic 模型继承对我不起作用,因为许多字段组合在模板模型之间混合和匹配。如果有更好的方法,我愿意完全改变我的方法。谢谢!
在 Python 的类型系统中不可能生成子集类型(即从一种大类型生成模型)(例如,在 Typescript 中,您可以使用
Pick
来完成此操作)。
我猜你在技术上可以为每个字段定义一个 Pydantic 模型,然后使用多重继承构建你的实际模型:
from pydantic import BaseModel
class _CustNameField(BaseModel):
cust_name: str
class _BillAddressField(BaseModel):
bill_address: str
class _SkipAddressField(BaseModel):
ship_address: str
class _RefNumField(BaseModel):
ref_num: int
###################################
class TemplateA(_CustNameField, _BillAddressField):
pass
class TemplateB(_CustNameField, _RefNumField):
pass
class TemplateC(_BillAddressField, _SkipAddressField):
pass
不确定我会推荐它,当你有很多领域时,使用它似乎很痛苦,但它会实现你想要的。