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
是一个属性,所以我看不到不使用它的理由。是的,这似乎是合理的。