
namedtuple del módulo collections se utiliza para definir subclases de la clase tuple, que permiten crear tuplas a medida a los programadores. El nombre del nuevo tipo de tupla será el que se indique en el primer argumento y constará de los campos que se incluyan en la lista del segundo argumento:
Si el argumento rename es True los nombres de campos que no sean válidos serán sustituidos, automáticamente, por nombres posicionales ('_1', '_2', ...). También, si el argumento verbose es True la definición de la clase será impresa después de que se construya. Esta última opción que tiende a desaparecer se obtiene también mediante el atributo _source.
Los nombres de los campos pueden contener caracteres alfabéticos, numéricos y guiones bajos; y no pueden comenzar con caracteres numéricos o guiones bajos, ni pueden ser, lógicamente, palabras reservadas del lenguaje Python.
Ir al índice del tutorial de Python
namedtuple(typename, field_names, verbose=False, rename=False)
Si el argumento rename es True los nombres de campos que no sean válidos serán sustituidos, automáticamente, por nombres posicionales ('_1', '_2', ...). También, si el argumento verbose es True la definición de la clase será impresa después de que se construya. Esta última opción que tiende a desaparecer se obtiene también mediante el atributo _source.
Los nombres de los campos pueden contener caracteres alfabéticos, numéricos y guiones bajos; y no pueden comenzar con caracteres numéricos o guiones bajos, ni pueden ser, lógicamente, palabras reservadas del lenguaje Python.
import collections
# Crear un nuevo tipo de tupla para contener datos
# de elementos químicos
elemento = collections.namedtuple('elemento',
['nombre', 'simbolo', 'numato'])
# Crear un nuevo objeto del tipo elemento,
# con datos del Azufre
elem = elemento('Azufre', 'S', 16)
# Mostrar información del objeto anterior
print(elem.nombre, elem.simbolo, elem.numato) # Azufre S 16
print(elem[0], elem[1], elem[2]) # Azufre S 16
print(elem) # elemento(nombre='Azufre', simbolo='S', numato=16)
# Conocer de qué tipo es el objeto 'elem'
print(type(elem)) #
# Mostrar la definición de la subclase 'elem'
print(elem._source)
# Mostrar los nombres de campos de la subclase 'elem'
print(elem._fields)
# nombres de campos: ('nombre', 'simbolo', 'numato')
# Sustituir los valores actuales
elem = elem._replace(nombre='Carbono', simbolo='C', numato=6)
# Mostrar información
print(elem.nombre) # 'Carbono'
# Mostrar tipo de diccionario con los campos ordenados
# como en una tupla
print(elem._asdict())
# Obtener el valor del campo indicado
print(getattr(elem, 'simbolo')) # 'C'
# Crear otro tipo nuevo para contener coordenadas de
# un plano y color
coordenada = collections.namedtuple('coordenada',
['x', 'y', 'color'])
coord = coordenada(12, 53, 'blue')
# Mostrar valores
print('x=', coord.x)
print('y=', coord.y)
print('color=', coord.color)
x, y, color = coord
print(x, y, color)
Ir al índice del tutorial de Python