typing.NamedTuple
Tilføj typeangivelser til named tuples
typing.NamedTuple er en gratis Python Academy-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Python Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Python Academy-kurset indeholder 4 lektioner i alt.
Et typebaseret alternativ
Basisklassen typing.NamedTuple er en moderne, klassebaseret måde at definere navngivne tuples på. Den tilføjer typeangivelser og ligner en normal klasse, hvilket de fleste editorer og typekontrolværktøjer forstår bedre end fabriksformen.
Klassebaseret syntaks
Nedstamm fra NamedTuple, og deklarér hvert felt med en typeangivelse. Resultatet er stadig en rigtig tuple.
from typing import NamedTuple
class Point(NamedTuple):
x: int
y: int
p = Point(1, 2)
print(p)Samme tuple-adfærd
Alt fra fabriksvarianten fungerer stadig: navneadgang, indeksadgang, udpakning og uforanderlighed.
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)Standardværdier direkte i klassen
Giv et felt en standardværdi ved blot at tildele en værdi i klassens krop. Felter med standardværdi skal komme efter felter uden standardværdi.
from typing import NamedTuple
class Point(NamedTuple):
x: int
y: int
z: int = 0
print(Point(1, 2))
print(Point(1, 2, 9))Tilføj metoder
Fordi det er en klasse, kan du tilføje egentlige metoder. Det er noget, som fabrikken collections.namedtuple ikke kan gøre på en enkel måde.
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())Også egenskaber
Du kan også definere beregnede egenskaber, der udleder værdier fra felterne.
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)Hjælpemetoderne er stadig tilgængelige
De velkendte tuple-hjælpere er stadig tilgængelige: _replace(), _asdict() og _fields fungerer alle på samme måde.
from typing import NamedTuple
class Point(NamedTuple):
x: int
y: int
p = Point(1, 2)
print(p._asdict())
print(p._replace(x=9))Typeangivelser dokumenterer hensigten
Typeangivelserne håndhæves ikke under kørsel, men de dokumenterer de forventede typer og lader værktøjer som mypy finde fejl, før du kører programmet.
from typing import NamedTuple
class Employee(NamedTuple):
name: str
salary: float
active: bool = True
e = Employee('Alice', 5000.0)
print(e)NamedTuple kontra dataclass
Sådan vælger du mellem dem:
- NamedTuple: uforanderlig, tuple-lignende og understøtter indeksadgang og udpakning.
- dataclass: foranderlig som standard (eller uforanderlig), understøtter ikke indeksadgang og har flere konfigurationsmuligheder.
- Vælg NamedTuple, når tuple-adfærd er vigtig, og dataclass til mere omfattende datastrukturer.
Indlejring og sammensætning
Navngivne tuples kan nemt sammensættes. Et felt kan være en anden navngiven tuple, så du kan opbygge strukturerede, uforanderlige data.
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)Som funktioners returtyper
Angiv, at en funktion returnerer din NamedTuple, så editorer kender felt-typerne i resultatet. Typeangivelsen dokumenterer strukturen af den returnerede post.
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)Hurtig kontrol
Hvad er en fordel ved typing.NamedTuple frem for fabrikken collections.namedtuple?
Opsummering
Du har lært at tilføje typeangivelser til navngivne tuples.
- Nedstamm fra
typing.NamedTuplemed felter, der har typeangivelser. - Angiv standardværdier direkte, og tilføj metoder og egenskaber.
- Hjælperne
_replace,_asdictog_fieldsfungerer stadig. - Foretræk den frem for fabrikken på grund af læsbarhed og værktøjsunderstøttelse.
Lær Python med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 76
- Lektioner
- 320
Ofte stillede spørgsmål
Er lektionen “typing.NamedTuple” gratis?
Ja — hele teksten til “typing.NamedTuple” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Python Academy-kurset, skal du opgradere til CoddyKit PRO. Python Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “typing.NamedTuple”?
Tilføj typeangivelser til named tuples Du øver dig i Python Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Python Academy?
Der kræves ingen tidligere erfaring. Python Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.
Hvor lang tid tager lektionen “typing.NamedTuple”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Python Academy-lektion?
Ja. Alle Python Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Enum-klassen
- IntEnum og Flag
- Grundlæggende om NamedTuple
- typing.NamedTuple