no-named-tuple¶
Enforce the use of dataclasses.dataclass decorator instead of NamedTuple for cleaner customization and
inheritance. It supports default value, combining fields for inheritance, and omitting optional fields at
instantiation. @dataclass is faster at reading an object’s nested properties and executing its methods.
Message¶
Instead of NamedTuple, consider using the @dataclass decorator from dataclasses instead for simplicity, efficiency and consistency.
References¶
Valid examples¶
@dataclass(frozen=True)
class Foo:
pass
@dataclass(frozen=False)
class Foo:
pass
Show more
class Foo:
pass
class Foo(SomeOtherBase):
pass
@some_other_decorator
class Foo:
pass
@some_other_decorator
class Foo(SomeOtherBase):
pass
from typing import NamedTuple as NT
Other = NT
Invalid examples¶
from typing import NamedTuple
class Foo(NamedTuple):
pass
Suggested fix
import dataclasses
@dataclasses.dataclass(frozen=True)
class Foo:
pass
Show more
from typing_extensions import NamedTuple
class Foo(NamedTuple):
pass
Suggested fix
import dataclasses
@dataclasses.dataclass(frozen=True)
class Foo:
pass
from typing import NamedTuple as NT
class Foo(NT):
pass
Suggested fix
import dataclasses
@dataclasses.dataclass(frozen=True)
class Foo:
pass
import typing as typ
class Foo(typ.NamedTuple):
pass
Suggested fix
import dataclasses
import typing as typ
@dataclasses.dataclass(frozen=True)
class Foo:
pass
from typing import NamedTuple
class Foo(NamedTuple, AnotherBase, YetAnotherBase):
pass
Suggested fix
import dataclasses
@dataclasses.dataclass(frozen=True)
class Foo(AnotherBase, YetAnotherBase):
pass
from typing import NamedTuple
class OuterClass(SomeBase):
class InnerClass(NamedTuple):
pass
Suggested fix
import dataclasses
class OuterClass(SomeBase):
@dataclasses.dataclass(frozen=True)
class InnerClass:
pass
from typing import NamedTuple
@some_other_decorator
class Foo(NamedTuple):
pass
Suggested fix
import dataclasses
@some_other_decorator
@dataclasses.dataclass(frozen=True)
class Foo:
pass
from dataclasses import dataclass
from typing import NamedTuple
class Foo(NamedTuple):
pass
Suggested fix
from dataclasses import dataclass
@dataclass(frozen=True)
class Foo:
pass
import dataclasses as dc
from typing import NamedTuple
class Foo(NamedTuple):
pass
Suggested fix
import dataclasses as dc
@dc.dataclass(frozen=True)
class Foo:
pass
from collections import namedtuple
Point = namedtuple("Point", ["x", "y"])
from typing import NamedTuple
Point = NamedTuple("Point", [("x", int), ("y", int)])
from typing_extensions import NamedTuple
Point = NamedTuple("Point", [("x", int), ("y", int)])
from typing import NamedTuple as NT
Point = NT("Point", [("x", int), ("y", int)])
import typing
Point = typing.NamedTuple("Point", [("x", int), ("y", int)])
import typing as typ
Point = typ.NamedTuple("Point", [("x", int), ("y", int)])
from typing import *
Point = NamedTuple("Point", [("x", int), ("y", int)])
from typing import *
class Foo(NamedTuple):
pass
from typing_extensions import *
class Foo(NamedTuple):
pass
from typing import NamedTuple
NT = NamedTuple
class Foo(NT):
pass
from typing import NamedTuple as NT
class Foo(NT):
pass
Other = NT
from typing import NamedTuple
A = B = NamedTuple
class Foo(A):
pass