Skip to content

collections-named-tuple (PYI024): Documented fix is not equivalent #16492

@Avasam

Description

@Avasam

Summary

From the doc:

Example

from collections import namedtuple

person = namedtuple("Person", ["name", "age"])

Use instead:

from typing import NamedTuple

class Person(NamedTuple):
    name: str
    age: int

But that's not equivalent! Since the variable name person differs from the class name Person.

For this to be equivalent:

from collections import namedtuple

person = namedtuple("Person", ["name", "age"])
Rect = namedtuple("Rect", ["x", "y"])

This would be used:

from typing import NamedTuple

class person(NamedTuple):
    __name__ = "Person"
    name: str
    age: int

class Rect(NamedTuple):
    x: int
    y: int

or

from typing import NamedTuple

class Person(NamedTuple):
    name: str
    age: int
person = Person  # old name

class Rect(NamedTuple):
    x: int
    y: int

I wouldn't recommend that usage. But backwards compatibility is important in libraries, where NamedTuples matter more.

Metadata

Metadata

Assignees

No one assigned

    Labels

    documentationImprovements or additions to documentationhelp wantedContributions especially welcome

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions