我在一些代码中使用了collections.namedtuple
,但现在我看到在Python 3.6中,新的类样式中有一个新的typing.NamedTuple
基类可用。它似乎还为元组中的命名索引提供类型提示。
除了与旧代码的兼容性之外,是否有任何理由在新编写的代码中继续使用旧的 collections.namedtuple
(来自 Python 2.6)?
即是否有性能优势,是否使用更少的内存等?
最佳答案
不幸的是,typing.NamedTuple
does not currently support mixins 。例如(截取下面的示例 from this issue discussion )我们可以创建一个枚举,它继承了 collections.namedtuple
mixin 的所有属性,但我们不能用 typing 做同样的事情.NamedTuple
我们可能希望免费获得类型提示:
>>> from enum import Enum
>>> from collections import namedtuple
>>> TTuple = namedtuple('TTuple', 'id a blist')
>>> class NTEnum(TTuple, Enum):
... NONE = TTuple(0, 0, [])
... A = TTuple(1, 2, [4])
... B = TTuple(2, 4, [0, 1, 2])
...
>>> NTEnum.A
<NTEnum.A: TTuple(id=1, a=2, blist=[4])>
>>>
>>> NTEnum.A.id
1
>>> NTEnum.B.blist
[0, 1, 2]
关于python - 在Python中是否有任何理由使用collections.namedtuple而不是typing.NamedTuple?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61648970/