Variables de instancia vs. variables de clase
Parte de la sección Programación orientada a objetos 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í tienes 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 = gradeCrea 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) # BAccede 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 SchoolAhora cambia la variable de clase:
Student.school = "Python Academy"Comprueba cómo afecta el cambio a todas las instancias:
print(alice.school) # Python Academy
print(bob.school) # Python AcademySalida:
Alice
Bob
A
B
Python High School
Python High School
Python High School
Python Academy
Python AcademyTambién puedes crear variables de instancia después de crear el objeto:
alice.age = 16 # Esto crea una variable de instancia
print(alice.age) # 16
# print(bob.age) # Esto provocaría un error: bob no tiene ageDiferencia 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.
Desafío
FácilCompleta 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 claseBankAccountcon atributos y métodosdriver.py: Importa la clase, crea cuentas y demuestra el uso de variables de clase
Sigue los comentarios TODO en ambos archivos para obtener instrucciones paso a paso. Los comentarios te guiarán para crear la clase con las variables y los métodos adecuados, y para mostrar cómo las variables de clase afectan a todas las instancias.
Pruébalo tú mismo
# TODO: Importa la clase BankAccount de bank_account.py
from bank_account import BankAccount
# TODO: Crea dos cuentas con estos datos exactos:
# - account1: titular "Alice Smith" con un saldo de $1000
# - account2: titular "Bob Jones" con un saldo de $2000
# TODO: Llama a display_info() para ambas cuentas
# TODO: Cambia la variable de clase interest_rate a 0.03 (3%)
# Usa este formato: BankAccount.interest_rate = 0.03
# TODO: Imprime el texto "After interest rate change:"
# TODO: Llama de nuevo a display_info() para ambas cuentas para mostrar que las dos tienen la nueva tasa de interésEsta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Programación orientada a objetos
1Fundamentos de la POO
Introducción a la POOArchivos externosClases vs. objetosEl parámetro selfMétodosAtributosMétodo constructor (__init__)Repaso: calculadora sencilla4Herencia
Herencia básicaLa función super()Sobrescritura de métodosHerencia múltipleOrden de resolución de métodosRepaso: jerarquía de empleados7Métodos especiales
Introducción a los métodos mágicosSobrecarga de operadoresMétodos mágicos de contenedoresRepaso: lista personalizada10Patrones de diseño, parte 1
Introducción a los patrones de diseñoPatrón SingletonPatrón FactoryPatrón ObserverPatrón Strategy2Decoradores
Introducción a los decoradoresDecorador de propiedadDecorador de método estáticoDecorador de método de clase5Polimorfismo
Repaso de la sobrescritura de métodosTipado patoClases y métodos abstractosDiseño de interfacesRepaso: calculadora de formas8Conceptos avanzados de POO
Composición frente a herenciaMixinsMétodos estáticos y de claseDecoradores de claseGestores de contexto11Patrones de diseño, parte 2
Patrón CommandPatrón AdapterPatrón DecoratorPatrón Template MethodPatrón StatePatrón Composite3Propiedades de clase
Variables de instancia vs. variables de claseDecoradores de propiedadesAtributos privadosRepaso: gestor de cuentas bancariasPractica por tu cuenta: Compilador de Python online