Menu
Coddy logo textTech

Variables de instancia vs de clase

Parte de la sección Object Oriented Programming del Journey de Python de Coddy — lección 13 de 64.

Las variables de instancia son únicas para cada objeto, mientras que las variables de clase son compartidas por todos los objetos de la misma clase.

Aquí hay un ejemplo de una clase con ambos tipos de variables

class Student:
    # Variable de clase - compartida por todas las instancias
    school = "Python High School"
    
    def __init__(self, name, grade):
        # Variables de instancia - únicas para cada estudiante
        self.name = name
        self.grade = grade

Crea objetos de estudiante:

alice = Student("Alice", "A")
bob = Student("Bob", "B")

Accede a las variables de instancia (únicas para cada objeto):

print(alice.name)  # Alice
print(bob.name)    # Bob
print(alice.grade) # A
print(bob.grade)   # B

Accede a las variables de clase (compartidas por todos los objetos):

print(alice.school)     # Python High School
print(bob.school)       # Python High School
print(Student.school)   # Python High School

Ahora cambia la variable de clase:

Student.school = "Python Academy"

Comprueba cómo el cambio afecta a todas las instancias:

print(alice.school)   # Python Academy
print(bob.school)     # Python Academy

Salida:

Alice
Bob
A
B
Python High School
Python High School
Python High School
Python Academy
Python Academy

También puedes crear variables de instancia después de la creación del objeto:

alice.age = 16  # Esto crea una variable de instancia
print(alice.age)  # 16
# print(bob.age)  # Esto causaría un error - bob no tiene age

Diferencia clave: Las variables de instancia (creadas con self.variable_name) son únicas para cada objeto, mientras que las variables de clase (definidas directamente en la clase) son compartidas por todos los objetos. Cambiar una variable de clase afecta a todas las instancias.

challenge icon

Desafío

Fácil

Completa un sistema bancario. Definirás una clase BankAccount en un archivo y la usarás en otro.

Trabajarás con:

  • bank_account.py: Define la clase BankAccount con atributos y métodos
  • driver.py: Importa la clase, crea cuentas y demuestra las variables de clase

Sigue los comentarios TODO en ambos archivos para obtener instrucciones paso a paso. Los comentarios te guiarán a través de la creación de la clase con las variables y métodos adecuados, y mostrarán cómo las variables de clase afectan a todas las instancias.

Hoja de referencia

Las variables de instancia son únicas para cada objeto, mientras que las variables de clase son compartidas por todos los objetos de la misma clase.

Clase con ambos tipos de variables:

class Student:
    # Class variable - shared by all instances
    school = "Python High School"
    
    def __init__(self, name, grade):
        # Instance variables - unique to each student
        self.name = name
        self.grade = grade

Acceder a las variables de instancia (únicas para cada objeto):

alice = Student("Alice", "A")
bob = Student("Bob", "B")
print(alice.name)  # Alice
print(bob.name)    # Bob

Acceder a las variables de clase (compartidas por todos los objetos):

print(alice.school)     # Python High School
print(bob.school)       # Python High School
print(Student.school)   # Python High School

Cambiar las variables de clase afecta a todas las instancias:

Student.school = "Python Academy"
print(alice.school)   # Python Academy
print(bob.school)     # Python Academy

Crear variables de instancia después de la creación del objeto:

alice.age = 16  # This creates an instance variable
print(alice.age)  # 16

Pruébalo tú mismo

# TODO: Importar la clase BankAccount desde bank_account.py
from bank_account import BankAccount

# TODO: Crear dos cuentas con estos detalles exactos:
# - account1: titular "Alice Smith" con un saldo de $1000
# - account2: titular "Bob Jones" con un saldo de $2000

# TODO: Llamar a display_info() para ambas cuentas

# TODO: Cambiar la variable de clase interest_rate a 0.03 (3%)
# Usar este formato: BankAccount.interest_rate = 0.03

# TODO: Imprimir el texto "After interest rate change:"

# TODO: Llamar a display_info() para ambas cuentas nuevamente para mostrar que ambas tienen la nueva tasa de interés
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Object Oriented Programming