Есть ли причина использовать collections.namedtuple вместо typing.NamedTuple в Python?
Я использовал collections.namedtuple
в каком-то коде, но теперь я вижу, что в Python 3.6 есть новый typing.NamedTuple
базовый класс доступен в новом стиле класса. Кроме того, похоже, что подсказки типов доступны для именованных индексов в кортеже.
Есть ли причина продолжать использовать старую collections.namedtuple
(из Python 2.6) во вновь написанном коде, помимо совместимости со старым кодом?
т.е. есть ли преимущество в производительности, используется ли меньше памяти и т. д.?
1 ответ
К сожалению, в настоящее время не поддерживает миксины. Так, например (вырезая приведенный ниже пример из обсуждения этой проблемы ), мы можем создать перечисление, которое наследует все свойства от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]