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
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 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