Я использовал collections.namedtuple
в некотором коде, но теперь я вижу, что в Python 3.6 есть новый базовый класс typing.NamedTuple
, доступный в новом стиле класса. Также кажется, что подсказки типов доступны для именованных индексов в кортеже.
Есть ли какая-то причина продолжать использовать старый collections.namedtuple
(из Python 2.6) во вновь написанном коде, помимо совместимости со старым кодом?
т. е. есть ли преимущество в производительности, использует ли он меньше памяти и т. д.?
collections.namedtuple
, хотя для этого он использует некоторую сбивающую с толку магию метакласса, из-за чего некоторые вещи ведут себя странно. См., например, этот вопрос - person juanpa.arrivillaga   schedule 07.05.2020Foo(NamedTuple)
, а затем создаете экземпляр объектаfoo = Foo(bar, baz)
, тоisinstance(foo, NamedTuple)
будет True, но это не так... Конечно, это симметрично сisinstance(foo, collections.namedtuple)
, но в основном это более очевидно, чтоnamedtuple
является фабрикой классов, тогда какNamedTuple
по существу использует механизм метакласса, чтобы действовать как фабрика вызовов, не являясь при этом надлежащим родительским классом. Но практичность побеждает чистоту. - person juanpa.arrivillaga   schedule 07.05.2020