python - 在Python中是否有任何理由使用collections.namedtuple而不是typing.NamedTuple?

标签 python data-structures namedtuple python-class

我在一些代码中使用了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/

相关文章:

python - 模型按日期默认排序,空值排在前面

Swift 链表删除重复项

python - 连接具有相同 id Pandas DataFrame 的列

python - 什么是 namedtuples _replace 更好的替代品?

julia - 为命名元组设置索引

python - Flask SQLAlchemy 多对多关系新属性

python - django.db.utils.OperationalError : server closed the connection unexpectedly

python - 如何在 Python 中绘制多面体和 Lemke-Howson 路径?

c++ - [c++/pointers] : having objects A and B (B has vector member, 存储指向 A 的指针),知道 A 是否可以检索指向 B 的指针?

python - 在python中循环命名元组的元素