Atributos de clase vs. de instancia

Introducción a la programación orientada a objetos en Python

George Boorman

Curriculum Manager, DataCamp

Principios clave de la POO

Encapsulación:

  • Agrupar datos y métodos

Herencia:

  • Ampliar funcionalidades existentes

Polimorfismo:

  • Crear una interfaz unificada
Introducción a la programación orientada a objetos en Python

Atributos de instancia

class Employee:
    def __init__(self, name, salary):
        self.name = name
        self.salary = salary

emp1 = Employee("Teo Mille", 50000) 
emp2 = Employee("Marta Popov", 65000)
  • Los valores de name y salary son propios de cada objeto
  • self asigna al objeto
Introducción a la programación orientada a objetos en Python

Atributos de clase

  • Datos compartidos por todas las instancias de una clase

 

  • Define los atributos de clase en el cuerpo de class

 

  • “Variable global” dentro de la clase
Introducción a la programación orientada a objetos en Python

Implementar atributos de clase

class Employee:
    # Define un atributo de clase
    # Sin sintaxis self.
    MIN_SALARY = 30000 

def __init__(self, name, salary): self.name = name # Usa el nombre de la clase # para acceder al atributo de clase if salary >= Employee.MIN_SALARY: self.salary = salary
else: self.salary = Employee.MIN_SALARY
  • MIN_SALARY se comparte entre todas las instancias
  • No uses self para definir un atributo de clase
  • Por convención se usan mayúsculas
  • Usa ClassName.ATTR_NAME para acceder al valor del atributo de clase
Introducción a la programación orientada a objetos en Python

Atributos a nivel de clase

class Employee:
    # Define un atributo de clase
    MIN_SALARY = 30000    

def __init__(self, name, salary): self.name = name # Usa el nombre de la clase # para acceder al atributo de clase if salary >= Employee.MIN_SALARY: self.salary = salary else: self.salary = Employee.MIN_SALARY
emp1 = Employee("John", 40000)
print(emp1.MIN_SALARY)
30000
emp2 = Employee("Jane", 60000)
print(emp2.MIN_SALARY)
30000
Introducción a la programación orientada a objetos en Python

Modificar atributos de clase

emp1 = Employee("John", 40000)
emp2 = Employee("Jane", 60000)

# Actualiza MIN_SALARY de emp1 emp1.MIN_SALARY = 50000
# Imprime MIN_SALARY para ambos empleados print(emp1.MIN_SALARY) print(emp2.MIN_SALARY)
50000
30000
Introducción a la programación orientada a objetos en Python

Modificar atributos de clase

  • MIN_SALARY se crea en la definición de la clase

 

  • Actualizar MIN_SALARY de un objeto no cambia el valor en la clase

 

  • Seguridad: evita cambios en el software
Introducción a la programación orientada a objetos en Python

¿Por qué usar atributos de clase?

Constantes globales relacionadas con la clase

 

  • Valores mínimos y máximos para atributos
    • Evitan datos no válidos
  • Valores y constantes comunes, p. ej., host, port en una clase Database
    • Evitan repetir al crear objetos
Introducción a la programación orientada a objetos en Python

¡Vamos a practicar!

Introducción a la programación orientada a objetos en Python

Preparing Video For Download...