Tipos de atributos
1. Qué son los atributos en Python? #
En Python, los atributos son variables que pertenecen a una clase o a sus instancias. Los atributos pueden ser:
- Atributos de instancia: Son únicos para cada objeto creado a partir de una clase.
- Atributos de clase: Son compartidos por todas las instancias de una clase.
2. Atributos de instancia #
Los atributos de instancia son variables que se definen dentro del método __init__ de una clase. Cada objeto (instancia) creado a partir de la clase tendrá su propia copia de estos atributos, lo que significa que los valores pueden ser diferentes para cada instancia.
Ejemplo de atributos de instancia #
1class Coche: 2 def __init__(self, marca, modelo): 3 self.marca = marca # Atributo de instancia 4 self.modelo = modelo # Atributo de instancia 5 6# Crear dos instancias de la clase Coche 7coche1 = Coche("Toyota", "Corolla") 8coche2 = Coche("Honda", "Civic") 9 10# Mostrar los atributos de cada instancia 11print(f"Coche 1: {coche1.marca} {coche1.modelo}") 12print(f"Coche 2: {coche2.marca} {coche2.modelo}")Salida de consola Coche 1: Toyota Corolla Coche 2: Honda Civic
- ¿Qué hace este código?:
- Define una clase
Cochecon dos atributos de instancia:marcaymodelo. - Se crean dos objetos,
coche1ycoche2, cada uno con sus propios valores paramarcaymodelo.
- Define una clase
3. Atributos de clase #
Los atributos de clase son variables que se definen directamente en la clase, fuera de cualquier método. Estos atributos son compartidos por todas las instancias de la clase. Si cambias el valor de un atributo de clase, el cambio afectará a todas las instancias que compartan ese atributo.
Ejemplo de atributos de clase #
1class Coche: 2 ruedas = 4 # Atributo de clase 3 4 def __init__(self, marca, modelo): 5 self.marca = marca # Atributo de instancia 6 self.modelo = modelo # Atributo de instancia 7 8# Crear dos instancias de la clase Coche 9coche1 = Coche("Toyota", "Corolla") 10coche2 = Coche("Honda", "Civic") 11 12# Mostrar el atributo de clase para cada instancia 13print(f"Coche 1: {coche1.marca} {coche1.modelo}, Ruedas: {coche1.ruedas}") 14print(f"Coche 2: {coche2.marca} {coche2.modelo}, Ruedas: {coche2.ruedas}") 15 16# Cambiar el atributo de clase 17Coche.ruedas = 6 18 19# Mostrar el atributo de clase actualizado para cada instancia 20print(f"Después de cambiar el atributo de clase:") 21print(f"Coche 1: {coche1.marca} {coche1.modelo}, Ruedas: {coche1.ruedas}") 22print(f"Coche 2: {coche2.marca} {coche2.modelo}, Ruedas: {coche2.ruedas}")Salida de consola Coche 1: Toyota Corolla, Ruedas: 4 Coche 2: Honda Civic, Ruedas: 4 Después de cambiar el atributo de clase: Coche 1: Toyota Corolla, Ruedas: 6 Coche 2: Honda Civic, Ruedas: 6
- ¿Qué hace este código?:
- Define una clase
Cochecon un atributo de claseruedasque es compartido por todas las instancias. - Se crean dos objetos,
coche1ycoche2, y ambos tienen acceso al atributo de claseruedas. - El atributo de clase
ruedasse cambia a6, y este cambio se refleja en ambas instancias.
- Define una clase
Resumen del tema
Conceptos clave #
- Atributos de Instancia: variables vinculadas a
selfdentro de__init__o métodos; cada instancia almacena su propio valor independiente enobj.__dict__. - Atributos de Clase: variables declaradas en el cuerpo de la clase fuera de los métodos; pertenecen al espacio de nombres de la clase (
Clase.atributo) y son compartidas por todas las instancias. - Shadowing de Atributos: asignar
instancia.atributo_clase = nuevo_valorcrea un atributo de instancia local en lugar de modificar el atributo global de la clase. Para modificar el atributo compartido debe reasignarse directamente comoClase.atributo_clase = nuevo_valor.
Qué debes recordar #
Los atributos de instancia (self.x) son únicos por objeto, mientras que los atributos de clase (Clase.x) son compartidos por todas las instancias.