0Pricing
Python Academy · Lekcja

typing.NamedTuple

Dodawaj adnotacje typów do nazwanych krotek

typing.NamedTuple to bezpłatna lekcja Python Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Python Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Python Academy zawiera 4 lekcji w sumie.

Alternatywa z typami

Klasa bazowa typing.NamedTuple to nowoczesny, oparty na klasach sposób definiowania nazwanych krotek. Dodaje adnotacje typów i wygląda jak zwykła klasa, dzięki czemu większość edytorów i narzędzi do sprawdzania typów obsługuje ją lepiej niż formę fabryki.

Składnia oparta na klasie

Należy utworzyć klasę dziedziczącą po NamedTuple i zadeklarować każde pole wraz z adnotacją typu. Wynik nadal jest prawdziwą krotką.

from typing import NamedTuple

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

p = Point(1, 2)
print(p)

To samo zachowanie krotki

Wszystko, co działało w wersji fabrycznej, nadal działa: dostęp po nazwie, dostęp przez indeks, rozpakowywanie i niezmienność.

from typing import NamedTuple

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

p = Point(1, 2)
print(p.x, p[1])
x, y = p
print(x, y)

Wartości domyślne w definicji

Wartość domyślną pola można nadać po prostu przez przypisanie jej w ciele klasy. Pola z wartościami domyślnymi muszą występować po polach bez wartości domyślnych.

from typing import NamedTuple

class Point(NamedTuple):
    x: int
    y: int
    z: int = 0

print(Point(1, 2))
print(Point(1, 2, 9))

Dodawanie metod

Ponieważ jest to klasa, można dodawać do niej prawdziwe metody. Tego nie da się zrobić w przejrzysty sposób za pomocą fabryki collections.namedtuple.

from typing import NamedTuple

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

    def distance_sq(self):
        return self.x ** 2 + self.y ** 2

print(Point(3, 4).distance_sq())

Również właściwości

Można także definiować obliczane właściwości, które wyprowadzają wartości na podstawie pól.

from typing import NamedTuple

class Rectangle(NamedTuple):
    width: int
    height: int

    @property
    def area(self):
        return self.width * self.height

print(Rectangle(3, 4).area)

Metody pomocnicze nadal działają

Znane pomocnicze elementy krotki są nadal dostępne: _replace(), _asdict() i _fields działają tak samo.

from typing import NamedTuple

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

p = Point(1, 2)
print(p._asdict())
print(p._replace(x=9))

Adnotacje typów dokumentują zamiar

Adnotacje nie są wymuszane w czasie wykonywania programu, ale dokumentują oczekiwane typy i pozwalają narzędziom takim jak mypy wykrywać błędy przed uruchomieniem programu.

from typing import NamedTuple

class Employee(NamedTuple):
    name: str
    salary: float
    active: bool = True

e = Employee('Alice', 5000.0)
print(e)

NamedTuple a dataclass

Przy wyborze między nimi:

  • NamedTuple: niezmienny, podobny do krotki, obsługuje indeksowanie i rozpakowywanie.
  • dataclass: domyślnie zmienny (lub zamrożony), bez indeksowania, oferuje więcej opcji konfiguracji.
  • NamedTuple należy wybrać, gdy ważne jest zachowanie krotki, a dataclass — gdy potrzebny jest bogatszy rekord.

Zagnieżdżanie i kompozycja

Nazwane krotki dobrze się komponują. Pole może być inną nazwaną krotką, tworząc uporządkowane, niezmienne dane.

from typing import NamedTuple

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

class Line(NamedTuple):
    start: Point
    end: Point

line = Line(Point(0, 0), Point(3, 4))
print(line.end.y)

Jako typy zwracane przez funkcję

Należy opisać adnotacją, że funkcja zwraca Państwa NamedTuple, aby edytory znały typy pól wyniku. Adnotacja dokumentuje strukturę zwracanego rekordu.

from typing import NamedTuple

class Stats(NamedTuple):
    minimum: int
    maximum: int

def analyze(nums) -> Stats:
    return Stats(min(nums), max(nums))

r = analyze([5, 2, 8])
print(r.minimum, r.maximum)

Szybkie sprawdzenie

Jaka jest zaleta typing.NamedTuple w porównaniu z fabryką collections.namedtuple?

Podsumowanie

Nauczyli się Państwo dodawać adnotacje typów do nazwanych krotek.

  • Należy dziedziczyć po typing.NamedTuple i używać adnotacji przy polach.
  • Wartości domyślne można ustawiać bezpośrednio w definicji, a także dodawać metody i właściwości.
  • Pomocnicze elementy _replace, _asdict i _fields nadal działają.
  • Warto wybrać tę formę zamiast fabryki ze względu na czytelność i obsługę przez narzędzia.

Często zadawane pytania

Czy lekcja „typing.NamedTuple” jest bezpłatna?

Tak — pełny tekst „typing.NamedTuple” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Python Academy, przejdź na CoddyKit PRO. Kurs Python Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „typing.NamedTuple”?

Dodawaj adnotacje typów do nazwanych krotek Ćwiczysz Python Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Python Academy?

Nie wymagamy żadnego doświadczenia. Python Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „typing.NamedTuple”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Python Academy?

Tak. Każda lekcja Python Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Klasa Enum
  2. IntEnum i Flag
  3. Podstawy NamedTuple
  4. typing.NamedTuple
← Powrót do Python Academy