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.NamedTuplecon campi annotati. - Imposti i valori predefiniti inline; aggiunga metodi e proprietà.
- Gli helper
_replace,_asdicte_fieldscontinuano 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
- La classe Enum
- IntEnum e Flag
- Nozioni di base su NamedTuple
- typing.NamedTuple