我正在尝试实现以下内容(请参见mypy 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
, 更新数据库时)。
来自PEP 586:
Final
限定符作为一种简写方式,用于声明变量实际上是Literal
。
但是 mypy
报错:
error: TypedDict() expects a dictionary literal as the second argument
TypedDict
为什么不允许将Final
字典作为其第二个参数?
针对我的核心问题,是否有办法在不必复制架构的情况下,同时为两个TypedDict
(一个具有完整性,另一个没有完整性)使用相同的模式?
account_schema
实际上是Literal
,但它不符合TypedDict
构造函数的定义,对吗? - Mario Ishac{1:2,3:4}
。Literal
类型恰好被命名类似并不重要;这不是常见类型检查器可以处理的内容。 - MisterMiyagiLiteral
的答案,我将接受它。 - Mario Ishac