typing.NamedTuple
Lägg till typanvisningar i namngivna tupler
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.NamedTuplemed typanvisade fält. - Ange standardvärden direkt och lägg till metoder och egenskaper.
- Hjälpfunktionerna
_replace,_asdictoch_fieldsfungerar fortfarande. - Föredra detta framför fabriken för bättre läsbarhet och verktygsstöd.
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
- Enum-klassen
- IntEnum och Flag
- Grunderna i NamedTuple
- typing.NamedTuple