假设我有typing.NamedTuple
看起来像这样:
class Bla(typing.NamedTuple):
a: str
b: int = 666
c: str = 'blah'
我知道我可以Bla._field_types
为我提供字段名称到其类型的映射,Bla._field_defaults
会给我一个字段名称到默认值的映射。
我知道不应该使用以_
为前缀的任何规则,但我知道命名元组的情况并非总是如此。例如。即使在来自_asdict()
的旧namedtuple
中,collections
也可以使用,它只有下划线以避免潜在的名称冲突。
与此同时,有typing.get_type_hints
,在这种情况下与_field_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'>}
但这是一个更通用的功能,适用于比typing.NamedTuple
更多的东西。
有人知道有什么理由不使用_field_defaults
吗?
为了给出一些上下文,我需要一个动态的代码片段,它接受从typing.NamedTuple
继承的不同类,并根据环境中的值实例化它们。