考虑这个人为的例子:
from typing import Mapping, Union, MutableMapping
from typing_extensions import TypedDict, NotRequired
class Pet(TypedDict):
softness: NotRequired[int]
name: NotRequired[str]
# **IMPORTANT**: Assume these are only known at run time.
softness_exists = False
name_exists = True
optargs: MutableMapping[str, Union[int, str]] = dict()
if softness_exists:
optargs['softness'] = 999999
if name_exists:
optargs['name'] = 'David'
p = Pet(
type='Dog',
#Unsupported type "MutableMapping[str, Union[Food, int, str]]" for ** expansion in TypedDict
**optargs
)
print(p)
在我的现实用例中,我有相对大量的可选参数。基于运行时输入有条件地填充 optargs 是完成 TypedDict 构造的唯一有效方法。
但这似乎是不允许的。构造具有大量
NotRequired
字段的 TypedDict 的推荐方法是什么,其适用性在运行时决定?
我怀疑 TypedDict 实例中存在哪些 NotRequired 字段的决定无法在运行时决定。
您无需打开任何东西。只需直接在最终字典中设置条目即可:
p: Pet = {}
if softness_exists:
p['softness'] = 999999
if name_exists:
p['name'] = 'David'
(我省略了
type
,因为这实际上不是有效的 Pet
键,但这与当前的问题没有任何关系。)