Python Academy · Les

typing.NamedTuple

Voeg typehints toe aan named tuples

Les 4 van 413 stappen

typing.NamedTuple is een gratis Python Academy-les op CoddyKit. Dit is les 4 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Python Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Python Academy bevat in totaal 4 lessen.

Een alternatief met typen

De basisklasse typing.NamedTuple is een moderne manier op basis van klassen om benoemde tuples te definiëren. Deze voegt typehints toe en ziet eruit als een gewone klasse, die door de meeste editors en typecheckers beter wordt begrepen dan de fabrieksvorm.

Syntaxis op basis van klassen

Maak een subklasse van NamedTuple en declareer elk veld met een typeannotatie. Het resultaat is nog steeds een echte tuple.

from typing import NamedTuple

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

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

Hetzelfde tuplegedrag

Alles uit de fabrieksversie werkt nog steeds: toegang via naam, toegang via index, uitpakken en onveranderlijkheid.

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)

Standaardwaarden in de klasse

Geef een veld eenvoudig een standaardwaarde door in de klassebody een waarde toe te wijzen. Velden met een standaardwaarde moeten na velden zonder standaardwaarde komen.

from typing import NamedTuple

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

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

Methoden toevoegen

Omdat het een klasse is, kunt u echte methoden toevoegen. Dat kan niet netjes met de fabriek collections.namedtuple.

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

Ook eigenschappen

U kunt ook berekende eigenschappen definiëren die waarden uit de velden afleiden.

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)

Hulpmethoden blijven beschikbaar

De bekende tuplehulpmiddelen zijn nog steeds beschikbaar: _replace(), _asdict() en _fields werken allemaal op dezelfde manier.

from typing import NamedTuple

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

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

Typehints leggen de bedoeling vast

De annotaties worden niet tijdens runtime afgedwongen, maar documenteren de verwachte typen en laten hulpmiddelen zoals mypy fouten opsporen voordat u het programma uitvoert.

from typing import NamedTuple

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

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

NamedTuple versus dataclass

Zo kiest u ertussen:

  • NamedTuple: onveranderlijk, vergelijkbaar met een tuple, ondersteunt indexering en uitpakken.
  • dataclass: standaard veranderlijk (of bevroren), geen indexering en meer configuratiemogelijkheden.
  • Kies NamedTuple wanneer tuplegedrag belangrijk is; kies dataclass voor uitgebreidere gegevensrecords.

Nesten en samenstellen

Benoemde tuples kunnen goed worden samengesteld. Een veld kan een andere benoemde tuple zijn, waarmee u gestructureerde, onveranderlijke gegevens opbouwt.

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 retourtypen van functies

Annotateer een functie zodat deze uw NamedTuple retourneert. Zo weten editors welke typen de velden van het resultaat hebben. De annotatie documenteert de structuur van het geretourneerde record.

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)

Korte controle

Wat is een voordeel van typing.NamedTuple ten opzichte van de fabriek collections.namedtuple?

Samenvatting

U hebt geleerd typehints aan benoemde tuples toe te voegen.

  • Maak een subklasse van typing.NamedTuple met geannoteerde velden.
  • Stel standaardwaarden inline in en voeg methoden en eigenschappen toe.
  • De hulpmiddelen _replace, _asdict en _fields werken nog steeds.
  • Geef hier de voorkeur aan boven de fabriek vanwege de leesbaarheid en de ondersteuning door hulpmiddelen.
Gratis beginnen

Leer Python met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
76
Lessen
320

Veelgestelde vragen

Is de les “typing.NamedTuple” gratis?

Ja — de volledige tekst van “typing.NamedTuple” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Python Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Python Academy bevat in totaal 4 lessen.

Wat leer ik in “typing.NamedTuple”?

Voeg typehints toe aan named tuples Je oefent met Python Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Python Academy te beginnen?

Ervaring vooraf is niet nodig. Python Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 4 van 4.

Hoe lang duurt de les “typing.NamedTuple”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Python Academy?

Ja. Elke les over Python Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. De Enum-klasse
  2. IntEnum en Flag
  3. NamedTuple-basisprincipes
  4. typing.NamedTuple
← Terug naar Python Academy