typing.NamedTuple
Añada anotaciones de tipos a las tuplas con nombre
typing.NamedTuple es una lección gratuita de Python Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Python Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Python Academy incluye 4 lecciones en total.
Una alternativa con tipos
La clase base typing.NamedTuple es una forma moderna y basada en clases de definir tuplas con nombre. Añade anotaciones de tipo y tiene el aspecto de una clase normal, que la mayoría de los editores y comprobadores de tipos entienden mejor que la forma basada en una fábrica.
Sintaxis basada en clases
Herede de NamedTuple y declare cada campo con una anotación de tipo. El resultado sigue siendo una tupla real.
from typing import NamedTuple
class Point(NamedTuple):
x: int
y: int
p = Point(1, 2)
print(p)El mismo comportamiento de las tuplas
Todo lo que funciona en la versión basada en una fábrica sigue funcionando: acceso por nombre, acceso por índice, desempaquetado e inmutabilidad.
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)Valores predeterminados en línea
Asigne un valor en el cuerpo de la clase para proporcionar un valor predeterminado a un campo. Los campos con valores predeterminados deben aparecer después de los que no los tienen.
from typing import NamedTuple
class Point(NamedTuple):
x: int
y: int
z: int = 0
print(Point(1, 2))
print(Point(1, 2, 9))Cómo añadir métodos
Como es una clase, puede añadir métodos reales. Esto es algo que la fábrica collections.namedtuple no puede hacer de forma adecuada.
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())También puede definir propiedades
También puede definir propiedades calculadas que obtengan valores a partir de los campos.
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)Los métodos auxiliares se conservan
Los conocidos métodos auxiliares de las tuplas siguen disponibles: _replace(), _asdict() y _fields funcionan de la misma manera.
from typing import NamedTuple
class Point(NamedTuple):
x: int
y: int
p = Point(1, 2)
print(p._asdict())
print(p._replace(x=9))Las anotaciones de tipo documentan la intención
Las anotaciones no se aplican en tiempo de ejecución, pero documentan los tipos esperados y permiten que herramientas como mypy detecten errores antes de ejecutar el programa.
from typing import NamedTuple
class Employee(NamedTuple):
name: str
salary: float
active: bool = True
e = Employee('Alice', 5000.0)
print(e)NamedTuple frente a dataclass
Para elegir entre ambas:
- NamedTuple: inmutable, similar a una tupla y compatible con el acceso por índice y el desempaquetado.
- dataclass: mutable de forma predeterminada (o congelada), sin acceso por índice y con más opciones de configuración.
- Elija NamedTuple cuando sea importante el comportamiento de tupla; elija dataclass para registros más completos.
Anidamiento y composición
Las tuplas con nombre se pueden componer fácilmente. Un campo puede ser otra tupla con nombre, lo que permite crear datos estructurados inmutables.
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)Como tipos de retorno de funciones
Anote una función para que devuelva su NamedTuple, de modo que los editores conozcan los tipos de los campos del resultado. La anotación documenta la estructura del registro devuelto.
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)Comprobación rápida
¿Qué ventaja ofrece typing.NamedTuple frente a la fábrica collections.namedtuple?
Resumen
Ha aprendido a añadir anotaciones de tipo a las tuplas con nombre.
- Herede de
typing.NamedTuplecon campos anotados. - Establezca valores predeterminados en línea; añada métodos y propiedades.
- Los métodos auxiliares
_replace,_asdicty_fieldssiguen funcionando. - Prefiéralo a la fábrica por su legibilidad y compatibilidad con las herramientas.
Preguntas frecuentes
¿La lección «typing.NamedTuple» es gratis?
Sí — el texto completo de «typing.NamedTuple» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Python Academy, actualiza a CoddyKit PRO. El curso de Python Academy incluye 4 lecciones en total.
¿Qué aprenderé en «typing.NamedTuple»?
Añada anotaciones de tipos a las tuplas con nombre Practicas Python Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Python Academy?
No se requiere experiencia previa. Python Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «typing.NamedTuple»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Python Academy?
Sí. Cada lección de Python Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- La clase Enum
- IntEnum y Flag
- Conceptos básicos de NamedTuple
- typing.NamedTuple