Python Academy · leksjon

typing.NamedTuple

Legg til typehint i navngitte tupler

Leksjon 4 av 413 trinn

typing.NamedTuple er en gratis leksjon i Python Academy på CoddyKit. Dette er leksjon 4 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Python Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Python Academy inneholder totalt 4 leksjoner.

Et alternativ med typehint

Basisklassen typing.NamedTuple er en moderne, klassebasert måte å definere navngitte tupler på. Den legger til typehint og leses som en vanlig klasse, som de fleste editorer og typesjekkere forstår bedre enn fabrikkformen.

Klassebasert syntaks

Lag en underklasse av NamedTuple, og deklarer hvert felt med en typeanmerkning. Resultatet er fortsatt en ekte tuppel.

from typing import NamedTuple

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

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

Samme tuppeloppførsel

Alt fra fabrikkversjonen fungerer fortsatt: tilgang via navn, tilgang via indeks, utpakking og uforanderlighet.

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)

Standardverdier direkte i klassen

Angi en standardverdi for et felt ganske enkelt ved å tilordne en verdi i klassekroppen. Felt med standardverdi må komme etter felt uten standardverdi.

from typing import NamedTuple

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

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

Legge til metoder

Siden dette er en klasse, kan De legge til ekte metoder. Dette er noe fabrikkfunksjonen collections.namedtuple ikke kan gjøre på en ryddig måte.

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

Egenskaper også

Det er også mulig å definere beregnede egenskaper som utleder verdier fra feltene.

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)

Hjelpemetodene er fortsatt tilgjengelige

De velkjente tuppelhjelperne er fortsatt tilgjengelige: _replace(), _asdict() og _fields fungerer på samme måte som før.

from typing import NamedTuple

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

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

Typehint dokumenterer hensikten

Anmerkningene håndheves ikke under kjøring, men dokumenterer forventede typer og lar verktøy som mypy oppdage feil før programmet kjøres.

from typing import NamedTuple

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

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

NamedTuple eller dataclass

Valget mellom dem:

  • NamedTuple: uforanderlig, tuppellignende, støtter indeksering og utpakking.
  • dataclass: muterbar som standard (eller fryst), uten indeksering og med flere konfigurasjonsmuligheter.
  • Velg NamedTuple når tuppeloppførsel er viktig; velg dataclass for mer innholdsrike poster.

Nesting og komposisjon

Navngitte tupler kan settes sammen på en god måte. Et felt kan være en annen navngitt tuppel, slik at det bygges opp strukturerte, 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 returtyper for funksjoner

Angi at en funksjon returnerer Deres NamedTuple, slik at editorer kjenner felttypene i resultatet. Typeanmerkningen dokumenterer strukturen til posten som returneres.

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)

Kort kontroll

Hva er en fordel med typing.NamedTuple sammenlignet med fabrikkfunksjonen collections.namedtuple?

Oppsummering

De har lært å legge til typehint i navngitte tupler.

  • Lag en underklasse av typing.NamedTuple med typeanmerkede felt.
  • Angi standardverdier direkte i klassen, og legg til metoder og egenskaper.
  • Hjelperne _replace, _asdict og _fields fungerer fortsatt.
  • Foretrekk dette fremfor fabrikkformen for bedre lesbarhet og verktøystøtte.
Gratis å komme i gang

Lær deg Python med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
76
Leksjoner
320

Ofte stilte spørsmål

Er leksjonen «typing.NamedTuple» gratis?

Ja – hele teksten i «typing.NamedTuple» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Python Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Python Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «typing.NamedTuple»?

Legg til typehint i navngitte tupler Du øver på Python Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Python Academy?

Ingen tidligere erfaring er nødvendig. Python Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.

Hvor lang tid tar leksjonen «typing.NamedTuple»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Python Academy-leksjonen?

Ja. Alle Python Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Enum-klassen
  2. IntEnum og Flag
  3. Grunnleggende om NamedTuple
  4. typing.NamedTuple
← Tilbake til Python Academy