Atributos con Python

Los atributos con Python son las características que describen nuestro objeto: pueden ser atributos de instancia y atributos de clase.

Atributos de un objeto

Los atributos de instancia en Python son aquellos que podemos crear al vuelo y son independientes para cada instancia de clase; es decir, pueden ser únicos para cada objeto.

class Camisetas:
    pass

una_camiseta = Camisetas()
una_consola.marca = 'Salomon'
una_consola.fabricacion = 2022

print(f'La camiseta {una_consola.marca} se fabricó en {una_consola.fabricacion}')

# La camiseta Salomon se fabricó en 2022

Atributos de instancia o dinámicos

Ahora vamos a crear otra instancia de Camisetas, pero agregaremos un atributo diferente. Sustituiremos el atributo fabricacion por color.

class Camisetas:
    pass

otra_camiseta = Camisetas()
otra_camiseta.marca = 'Pryca'
otra_camiseta.color = 'blanca'

print(f'La otra camiseta {otra_camiseta.marca} es de color {otra_camiseta.color}')

# La otra camiseta Pryca es de color blanca

Atributos de clase

Cuando algún atributo va a existir en todas las instancias de nuestra clase, podemos definirlos en la clase directamente.

Por ejemplo, un atributo que existirá en todos nuestros objetos será la marca: independientemente de las características que tengan nuestras camisetas, hemos decidido que todas tendrán el atributo de marca.

Vamos a crear nuestra clase definiendo este atributo como atributo de clase; es decir, dentro de la clase Camisetas y con un valor por defecto ‘sin definir marca’, todos los objetos se van a crear con este atributo de clase y su marca será ‘sin definir marca’.

class Camisetas:
    marca = 'sin definir marca'
        
una_camiseta = Camisetas()
print(f'Camiseta de la marca: {una_camiseta.marca}')

# Camiseta de la marca: sin definir marca

De esta forma, nos estamos asegurando de que todas las camisetas dispongan del atributo marca; aunque de momento su valor sea que la marca está por definir, luego podemos modificarlo.

Modificando atributo de clase

Cuando modificamos un atributo de clase, todas las instancias que se creen posteriormente pasarán a tener como valor esa modificación. Lo vamos a ver con un ejemplo creando dos camisetas más.

class Camisetas:
    marca = 'sin definir marca'
        
una_camiseta = Camisetas()

print(f'Camiseta de la marca: {una_camiseta.marca}')
# Camiseta de la marca: sin definir marca

Camisetas.marca = 'Salomon'

otra_camiseta = Camisetas()
print(f'Camiseta de la marca: {otra_camiseta.marca}')
# Camiseta de la marca: Salomon

otra_nueva = Camisetas()
print(f'Camiseta de la marca: {otra_nueva.marca}')
# Camiseta de la marca: Salomon

Funciones para los atributos

En Python existen algunas funciones orientadas a trabajar con los atributos de los objetos. Vamos a ver algunos ejemplos:

  • hasattr() → Devuelve True si existe el atributo o False si no existe.
  • getattr() → Duelve el valor del atributo.
  • setattr() → Modifica el valor del atributo.
  • delattr() → Elimina el atributo.

Función hasattr() Python

Para el primer ejemplo, vamos a crear un objeto a partir de una clase y, haciendo uso de la función hasattr(), verificaremos si existen determinados atributos.

class Cliente:
    nombre = 'nombre'
    apellido1 = 'apellido1'
        
cliente_01 = Cliente()
print(hasattr(cliente_01, 'nombre'))
# True
print(hasattr(cliente_01, 'apellido2'))
# False

Función getattr() Python

Sabiendo que el atributo nombre existe, verificaremos su valor con la funcióngetattr(). Si el nombre es Pedro, que será el que evaluaremos mediante la estructura if, indicaremos ‘Correcto!’. Si no, ‘Incorrecto!’.

class Cliente:
    nombre = 'Pedro'
    apellido1 = 'Gómez'    

cliente_01 = Cliente()
if getattr(cliente_01, 'nombre') == 'Pedro':
    print('Correcto!')
else:
    print('Incorrecto!')

# Correcto!

Si incluimos un tercer parámetro al llamar a la función, nos lo devolverá en caso de que no exista dicho parámetro. Vamos a ver un ejemplo con la misma clase de antes. Como el tercer parámetro que enviamos no existe, nos lo devuelve; en este caso ‘XX’.

class Cliente:
    nombre = 'Pedro'
    apellido1 = 'Gómez'    

cliente_01 = Cliente()
print(getattr(cliente_01, 'edad', 'XX')

# XX

Función setattr() Python

Ahora haremos uso de la función setattr() para modificar el valor de apellido1. Para ello modificaremos un atributo que sepamos que existe y otro que no exista para ver qué pasa.

class Cliente:
    nombre = 'Pedro'
    apellido1 = 'Gómez'    

cliente_01 = Cliente()

setattr(cliente_01, 'apellido1', 'Fernández')
setattr(cliente_01, 'apellido2', 'Estrella')

print(cliente_01.apellido1)
# Fernández
print(cliente_01.apellido2)
# Estrella

Como vemos, si el atributo existe, se modifica correctamente; pero, si no, se crea el atributo nuevo y asigna el valor que hayamos indicado.

Función delattr() Python

Con la función delattr() podemos eliminar atributos de nuestro objeto.

class Cliente:
    pass

    def __init__(self, nombre, apellido1):
        self.nombre = nombre
        self.apellido1 = apellido1


cliente_01 = Cliente('Luis', 'Gómez')

print(cliente_01.nombre)
print(cliente_01.apellido1)
# Luis
# Gómez

delattr(cliente_01, 'nombre')

print(cliente_01.nombre)
# AttributeError: 'Cliente' object has no attribute 'nombre'

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *