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.NamedTuplei 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,_asdicti_fieldsnadal 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
- Klasa Enum
- IntEnum i Flag
- Podstawy NamedTuple
- typing.NamedTuple