typing.NamedTuple
Legg til typehint i navngitte tupler
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.NamedTuplemed typeanmerkede felt. - Angi standardverdier direkte i klassen, og legg til metoder og egenskaper.
- Hjelperne
_replace,_asdictog_fieldsfungerer fortsatt. - Foretrekk dette fremfor fabrikkformen for bedre lesbarhet og verktøystøtte.
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
- Enum-klassen
- IntEnum og Flag
- Grunnleggende om NamedTuple
- typing.NamedTuple