typing.NamedTuple
Named Tuples um Typhinweise ergänzen
typing.NamedTuple ist eine kostenlose Python Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Python Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Python Academy-Kurs umfasst insgesamt 4 Lektionen.
Eine typisierte Alternative
Die typing.NamedTuple-Basisklasse ist eine moderne, klassenbasierte Möglichkeit, benannte Tupel zu definieren. Sie ergänzt Typannotationen und liest sich wie eine normale Klasse, was die meisten Editoren und Typprüfer besser verstehen als die Factory-Variante.
Klassenbasierte Syntax
Leiten Sie eine Klasse von NamedTuple ab und deklarieren Sie jedes Feld mit einer Typannotation. Das Ergebnis ist weiterhin ein echtes Tupel.
from typing import NamedTuple
class Point(NamedTuple):
x: int
y: int
p = Point(1, 2)
print(p)Dasselbe Tupelverhalten
Alles aus der Factory-Variante funktioniert weiterhin: Zugriff über Namen, Zugriff über Index, Entpacken und Unveränderlichkeit.
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)Standardwerte inline
Geben Sie einem Feld einfach einen Standardwert, indem Sie ihm im Klassenrumpf einen Wert zuweisen. Felder mit Standardwerten müssen nach Feldern ohne Standardwert stehen.
from typing import NamedTuple
class Point(NamedTuple):
x: int
y: int
z: int = 0
print(Point(1, 2))
print(Point(1, 2, 9))Methoden hinzufügen
Da es sich um eine Klasse handelt, können Sie echte Methoden hinzufügen. Mit der Factory collections.namedtuple ist das nicht ohne Weiteres möglich.
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())Auch Properties
Sie können außerdem berechnete Properties definieren, die Werte aus den Feldern ableiten.
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)Hilfsmethoden bleiben erhalten
Die vertrauten Tupel-Hilfsmittel sind weiterhin verfügbar: _replace(), _asdict() und _fields funktionieren auf dieselbe Weise.
from typing import NamedTuple
class Point(NamedTuple):
x: int
y: int
p = Point(1, 2)
print(p._asdict())
print(p._replace(x=9))Typannotationen dokumentieren die Absicht
Die Annotationen werden zur Laufzeit nicht erzwungen, dokumentieren jedoch die erwarteten Typen und ermöglichen es Tools wie mypy, Fehler zu erkennen, bevor Sie das Programm ausführen.
from typing import NamedTuple
class Employee(NamedTuple):
name: str
salary: float
active: bool = True
e = Employee('Alice', 5000.0)
print(e)NamedTuple oder Dataclass
So treffen Sie die Wahl:
- NamedTuple: unveränderlich, tupelähnlich, unterstützt Indexzugriff und Entpacken.
- dataclass: standardmäßig veränderlich (oder eingefroren), kein Indexzugriff, mehr Konfigurationsmöglichkeiten.
- Wählen Sie NamedTuple, wenn Tupelverhalten wichtig ist, und dataclass für umfangreichere Datensätze.
Verschachtelung und Komposition
Benannte Tupel lassen sich gut zusammensetzen. Ein Feld kann ein weiteres benanntes Tupel enthalten, sodass strukturierte unveränderliche Daten entstehen.
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)Als Rückgabetyp von Funktionen
Annotieren Sie eine Funktion mit Ihrem NamedTuple als Rückgabetyp, damit Editoren die Feldtypen des Ergebnisses kennen. Die Annotation dokumentiert die Struktur des zurückgegebenen Datensatzes.
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)Kurze Überprüfung
Welchen Vorteil bietet typing.NamedTuple gegenüber der Factory collections.namedtuple?
Zusammenfassung
Sie haben gelernt, benannten Tupeln Typannotationen hinzuzufügen.
- Leiten Sie eine Klasse mit annotierten Feldern von
typing.NamedTupleab. - Setzen Sie Standardwerte inline und fügen Sie Methoden und Properties hinzu.
- Die Hilfsmittel
_replace,_asdictund_fieldsfunktionieren weiterhin. - Bevorzugen Sie diese Variante wegen der besseren Lesbarkeit und Werkzeugunterstützung gegenüber der Factory.
Häufig gestellte Fragen
Ist die Lektion „typing.NamedTuple“ kostenlos?
Ja — der vollständige Text von „typing.NamedTuple“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Python Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Python Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „typing.NamedTuple“?
Named Tuples um Typhinweise ergänzen Du übst Python Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Python Academy zu starten?
Keine Vorkenntnisse erforderlich. Python Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.
Wie lange dauert die Lektion „typing.NamedTuple“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Python Academy-Lektion Code schreiben und ausführen?
Ja. Jede Python Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Die Enum-Klasse
- IntEnum und Flag
- NamedTuple-Grundlagen
- typing.NamedTuple