Python Academy · Lektion

typing.NamedTuple

Lägg till typanvisningar i namngivna tupler

Lektion 4 av 413 steg

typing.NamedTuple är en gratis lektion i Python Academy på CoddyKit. Detta är lektion 4 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Python Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Python Academy innehåller totalt 4 lektioner.

Ett typat alternativ

Basklassen typing.NamedTuple är ett modernt, klassbaserat sätt att definiera namngivna tupler. Den lägger till typanvisningar och ser ut som en vanlig klass, vilket de flesta kodredigerare och typkontrollerare förstår bättre än fabriksformen.

Klassbaserad syntax

Ärv från NamedTuple och deklarera varje fält med en typanvisning. Resultatet är fortfarande en riktig tupel.

from typing import NamedTuple

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

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

Samma tupelbeteende

Allt från fabriksvarianten fungerar fortfarande: åtkomst via namn, indexåtkomst, uppackning och oföränderlighet.

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ärden direkt

Ange ett standardvärde för ett fält genom att helt enkelt tilldela ett värde i klassens kropp. Fält med standardvärden måste komma efter fält utan standardvärden.

from typing import NamedTuple

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

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

Lägga till metoder

Eftersom det är en klass kan ni lägga till riktiga metoder. Det är något som fabriken collections.namedtuple inte kan göra på ett smidigt sätt.

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())

Även egenskaper

Ni kan också definiera beräknade egenskaper som härleder värden från fälten.

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älpmetoderna finns kvar

De välkända tuplehjälpfunktionerna finns fortfarande tillgängliga: _replace(), _asdict() och _fields fungerar på samma sätt.

from typing import NamedTuple

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

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

Typanvisningar dokumenterar avsikten

Typanvisningarna framtvingas inte vid körning, men dokumenterar förväntade typer och låter verktyg som mypy upptäcka misstag innan ni kör programmet.

from typing import NamedTuple

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

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

NamedTuple jämfört med dataclass

Så här väljer ni mellan dem:

  • NamedTuple: oföränderlig, tupellik och stöder indexering och uppackning.
  • dataclass: föränderlig som standard (eller fryst), saknar indexering och har fler konfigurationsalternativ.
  • Välj NamedTuple när tupelbeteendet är viktigt och dataclass för mer innehållsrika poster.

Nästning och komposition

Namngivna tupler kan enkelt kombineras. Ett fält kan vara en annan namngiven tupel, så att ni bygger strukturerade, oföränderliga 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

Ange med en typanvisning att en funktion returnerar er NamedTuple, så att kodredigerare känner till resultatets fälttyper. Typanvisningen dokumenterar formen på den returnerade posten.

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)

Snabbtest

Vad är en fördel med typing.NamedTuple jämfört med fabriken collections.namedtuple?

Sammanfattning

Ni har lärt er att lägga till typanvisningar i namngivna tupler.

  • Skapa en subklass av typing.NamedTuple med typanvisade fält.
  • Ange standardvärden direkt och lägg till metoder och egenskaper.
  • Hjälpfunktionerna _replace, _asdict och _fields fungerar fortfarande.
  • Föredra detta framför fabriken för bättre läsbarhet och verktygsstöd.
Gratis att börja

Lär dig Python med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
76
Lektioner
320

Vanliga frågor

Är lektionen ”typing.NamedTuple” gratis?

Ja – hela texten till ”typing.NamedTuple” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Python Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i Python Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”typing.NamedTuple”?

Lägg till typanvisningar i namngivna tupler Ni övar på Python Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Python Academy?

Du behöver inga förkunskaper. Utbildningen i Python Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.

Hur lång tid tar lektionen ”typing.NamedTuple”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Python Academy-lektionen?

Ja. Varje Python Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Enum-klassen
  2. IntEnum och Flag
  3. Grunderna i NamedTuple
  4. typing.NamedTuple
← Tillbaka till Python Academy