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 = 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 el cambio afecta 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 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 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 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 = gradeAcceder a las variables de instancia (únicas para cada objeto):
alice = Student("Alice", "A")
bob = Student("Bob", "B")
print(alice.name) # Alice
print(bob.name) # BobAcceder 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 SchoolCambiar las variables de clase afecta a todas las instancias:
Student.school = "Python Academy"
print(alice.school) # Python Academy
print(bob.school) # Python AcademyCrear variables de instancia después de la creación del objeto:
alice.age = 16 # This creates an instance variable
print(alice.age) # 16Prué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ésEsta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Object Oriented Programming
1Fundamentos de la POO
Archivos externosIntroducción a la POOClases vs ObjetosEl parámetro selfMétodosAtributosMétodo constructor (__init__)Resumen - Calculadora simple4Herencia
Herencia básicaLa función super()Sobrescritura de métodosHerencia múltipleOrden de resolución de métodosResumen - 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 propertyDecorador de métodos estáticosDecorador de métodos de clase5Polimorfismo
Sobreescritura de métodos revisitadaDuck TypingClases y métodos abstractosDiseño de interfacesResumen - Calculadora de figuras8Conceptos avanzados de POO
Composición vs. 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 de claseDecoradores de propiedadesAtributos privadosResumen - Gestor de cuentas bancarias