如何在 TypedDict 中实例化大量 NotRequired 参数?

问题描述 投票:0回答:1

考虑这个人为的例子:

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 字段的决定无法在运行时决定。

python mypy python-typing
1个回答
0
投票

您无需打开任何东西。只需直接在最终字典中设置条目即可:

p: Pet = {}
if softness_exists:
    p['softness'] = 999999
if name_exists:
    p['name'] = 'David'

(我省略了

type
,因为这实际上不是有效的
Pet
键,但这与当前的问题没有任何关系。)

© www.soinside.com 2019 - 2024. All rights reserved.