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

时间:2018-04-05 13:32:35

标签: python

假设我有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继承的不同类,并根据环境中的值实例化它们。

0 个答案:

没有答案