Métodos de clase

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

George Boorman

Curriculum Manager, DataCamp

Métodos

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

    def give_raise(self, amount):
        self.salary += amount


# Valores únicos de atributos emp_one = Employee("John", 40000)
emp_one.give_raise(5000) print(emp_one.salary)
45000









# Valores únicos de atributos emp_two = Employee("Jane", 60000)
emp_two.give_raise(5000) print(emp_two.salary)
65000
Introducción a la programación orientada a objetos en Python

Métodos de clase

  • Se pueden definir métodos de clase
  • Deben tener un alcance estrecho porque no pueden usar datos de instancia
class MyClass:
    # Usa un decorador para declarar un método de clase
    @classmethod

# El argumento cls se refiere a la clase def my_awesome_method(cls, args...): # Lógica aquí # No puede usar atributos de instancia
# Llama a la clase, no al objeto MyClass.my_awesome_method(args...)
  • Como con self, cls es una convención, pero cualquier palabra vale
Introducción a la programación orientada a objetos en Python

Constructores alternativos

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

@classmethod def from_file(cls, filename): with open(filename, "r") as f: # Leer la primera línea name = f.readline().strip() # Leer la segunda línea como entero salary = int(f.readline().strip())
return cls(name, salary)
  • Permiten constructores alternativos
  • Solo puede haber un __init__()

 

  • Usa métodos de clase para crear objetos
  • Usa return para devolver un objeto
  • cls(...) llama a __init__(...)
Introducción a la programación orientada a objetos en Python

Constructores alternativos

class Employee:
  def __init__(self, name, salary):
      self.name = name
      self.salary = salary
  @classmethod
  def from_file(cls, filename):
      with open(filename, "r") as f:
          name = f.readline().strip()
          salary = int(f.readline().strip())
      return cls(name, salary)  

Employee.txt

Archivo de texto con el nombre John Smith y sueldo 40000

# Crea un empleado sin llamar a Employee()
emp = Employee.from_file("employee_data.txt")
print(emp.name)
John Smith
Introducción a la programación orientada a objetos en Python

Cuándo usar métodos de clase

  • Constructores alternativos

  • Métodos que no requieren atributos de instancia

  • Restringir a una sola instancia (objeto) de una clase

    • Conexiones a base de datos
    • Configuración
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...