Skip to content

convert-named-tuple-functional-to-class (UP014)#

Derived from the pyupgrade linter.

Fix is sometimes available.

What it does#

Checks for NamedTuple declarations that use functional syntax.

Why is this bad?#

NamedTuple subclasses can be defined either through a functional syntax (Foo = NamedTuple(...)) or a class syntax (class Foo(NamedTuple): ...).

The class syntax is more readable and generally preferred over the functional syntax, which exists primarily for backwards compatibility with collections.namedtuple.


from typing import NamedTuple

Foo = NamedTuple("Foo", [("a", int), ("b", str)])

Use instead:

from typing import NamedTuple

class Foo(NamedTuple):
    a: int
    b: str