我正在努力完成以下任务(参见mymyy playground):
from typing import TypedDict, Final
account_schema: Final = {"name": str, "email": str}
Account = TypedDict("Account", account_schema)
AccountPatch = TypedDict("AccountPatch", account_schema, total=False)
我的想法是我可以在一个地方指定我的模式,一个版本需要所有字段(Account
,当插入数据库时)和一个版本使所有字段可选(AccountPatch
,当更新数据库时)。
From PEP 586:
Final
限定符是声明a变量实际上是Literal
。
但是mypy
错误:
error: TypedDict() expects a dictionary literal as the second argument
为什么TypedDict
不允许Final
字典作为它的第二个参数?
对于我的核心问题,是否有任何方式我可以使用相同的模式为两个TypedDict
s(一个有整体,一个没有整体),而不必复制模式?
正如评论中指出的那样,这是不可能的。请参阅mymyy的github上提出的问题:TypedDict密钥重用?在这里引发错误。
定义两个TypeDict的唯一方法是重复代码from typing import TypedDict
Account = TypedDict("Account", {"name": str, "email": str})
AccountPatch = TypedDict("AccountPatch", {"name": str, "email": str}, total=False)