Python Academy · Lektion

typing.NamedTuple

Tilføj typeangivelser til named tuples

Lektion 4 af 413 trin

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.NamedTuple med felter, der har typeangivelser.
  • Angiv standardværdier direkte, og tilføj metoder og egenskaber.
  • Hjælperne _replace, _asdict og _fields fungerer stadig.
  • Foretræk den frem for fabrikken på grund af læsbarhed og værktøjsunderstøttelse.
Gratis at komme i gang

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

  1. Enum-klassen
  2. IntEnum og Flag
  3. Grundlæggende om NamedTuple
  4. typing.NamedTuple
← Tilbage til Python Academy