0Pricing
Python Academy · Lezione

typing.NamedTuple

Aggiungere annotazioni di tipo alle named tuple

typing.NamedTuple è una lezione Python Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Python Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Python Academy include 4 lezioni in totale.

Un'alternativa tipizzata

La classe base typing.NamedTuple è un modo moderno, basato sulle classi, per definire tuple con nome. Aggiunge gli hint di tipo e ha l'aspetto di una classe normale, che la maggior parte degli editor e dei type checker comprende meglio rispetto alla forma basata su factory.

Sintassi basata sulle classi

Crei una sottoclasse di NamedTuple e dichiari ogni campo con un'annotazione di tipo. Il risultato è comunque una vera tupla.

from typing import NamedTuple

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

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

Lo stesso comportamento delle tuple

Tutto ciò che funziona nella versione basata su factory continua a funzionare: accesso tramite nome, accesso tramite indice, spacchettamento e immutabilità.

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)

Valori predefiniti inline

Assegni semplicemente un valore a un campo nel corpo della classe per definirne il valore predefinito. I campi con un valore predefinito devono essere dichiarati dopo quelli senza valore predefinito.

from typing import NamedTuple

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

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

Aggiungere metodi

Poiché è una classe, può aggiungere veri metodi. È una possibilità che la factory collections.namedtuple non offre in modo altrettanto efficace.

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

Anche le proprietà

Può anche definire proprietà calcolate che ricavano i valori dai campi.

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)

Gli helper vengono mantenuti

I noti helper delle tuple sono ancora disponibili: _replace(), _asdict() e _fields funzionano tutti allo stesso modo.

from typing import NamedTuple

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

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

Gli hint di tipo documentano l'intento

Le annotazioni non vengono applicate a runtime, ma documentano i tipi previsti e consentono a strumenti come mypy di individuare gli errori prima di eseguire il programma.

from typing import NamedTuple

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

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

NamedTuple o dataclass

Come scegliere tra i due:

  • NamedTuple: immutabile, simile a una tupla, supporta l'accesso tramite indice e lo spacchettamento.
  • dataclass: modificabile per impostazione predefinita (oppure congelata), senza accesso tramite indice e con più opzioni di configurazione.
  • Scelga NamedTuple quando è importante il comportamento delle tuple; scelga dataclass per record più ricchi.

Annidamento e composizione

Le tuple con nome si compongono facilmente. Un campo può essere un'altra tupla con nome, permettendo di creare dati strutturati e immutabili.

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)

Come tipi restituiti dalle funzioni

Annoti una funzione in modo che restituisca il proprio NamedTuple, così gli editor conosceranno i tipi dei campi del risultato. L'annotazione documenta la struttura del record restituito.

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)

Verifica rapida

Qual è un vantaggio di typing.NamedTuple rispetto alla factory collections.namedtuple?

Riepilogo

Ha imparato ad aggiungere hint di tipo alle tuple con nome.

  • Crei una sottoclasse di typing.NamedTuple con campi annotati.
  • Imposti i valori predefiniti inline; aggiunga metodi e proprietà.
  • Gli helper _replace, _asdict e _fields continuano a funzionare.
  • Lo preferisca alla factory per una maggiore leggibilità e per il supporto degli strumenti.

Domande Frequenti

La lezione «typing.NamedTuple» è gratuita?

Sì — il testo completo di «typing.NamedTuple» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Python Academy, passa a CoddyKit PRO. Il corso Python Academy include 4 lezioni in totale.

Cosa imparerò in «typing.NamedTuple»?

Aggiungere annotazioni di tipo alle named tuple Eserciti Python Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Python Academy?

Non è richiesta alcuna esperienza precedente. Python Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.

Quanto tempo richiede la lezione «typing.NamedTuple»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Python Academy?

Sì. Ogni lezione Python Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. La classe Enum
  2. IntEnum e Flag
  3. Nozioni di base su NamedTuple
  4. typing.NamedTuple
← Torna a Python Academy