Python 在typing.NamedTuple上获取字段默认值的优雅方法

Python 在typing.NamedTuple上获取字段默认值的优雅方法,python,Python,假设我有一个输入。名为tuple的,如下所示: class Bla(typing.NamedTuple): a: str b: int = 666 c: str = 'blah' 我知道我可以Bla.\u field\u types将字段名映射到它们的类型,Bla.\u field\u defaults将字段名映射到它们的默认值 我知道一条规则,即任何前缀为\uuu的东西都不应该使用,但我知道命名元组并不总是这样。例如,集合中的\u asdict()即使在旧的named

假设我有一个
输入。名为tuple
的,如下所示:

class Bla(typing.NamedTuple):
    a: str
    b: int = 666
    c: str = 'blah'
我知道我可以
Bla.\u field\u types
将字段名映射到它们的类型,
Bla.\u field\u defaults
将字段名映射到它们的默认值

我知道一条规则,即任何前缀为
\uuu
的东西都不应该使用,但我知道命名元组并不总是这样。例如,
集合中的
\u asdict()
即使在旧的
namedtuple
中也可以使用,它只有下划线以避免潜在的名称冲突

同时,还有
键入。获取\u type\u提示
,其工作原理类似于本例中的
\u field\u types

>>> Bla._field_types
OrderedDict([('a', <class 'str'>), ('b', <class 'int'>), ('c', <class 'str'>)])
>>> typing.get_type_hints(Bla)
{'a': <class 'str'>, 'b': <class 'int'>, 'c': <class 'str'>}
>>Bla.\u字段\u类型
订单信息([('a',),('b',),('c',)]))
>>>键入。获取键入提示(Bla)
{'a':,'b':,'c':}
但这是一个更通用的函数,它比
typing.NamedTuple
s适用于更多的事情

那么,有人知道不使用
\u field\u defaults
的原因吗


为了提供一些上下文,我需要一段动态代码,它接受从
类型继承的不同类。命名为tuple
,并根据环境中的值实例化它们。

\u field\u types
是一个属性,所以我看不到不使用它的理由。是的,这似乎是合理的。