Decorador de métodos de clase
Parte de la sección Object Oriented Programming del Journey de Python de Coddy — lección 12 de 64.
El decorador @classmethod crea métodos que reciben la clase misma como el primer parámetro (cls) en lugar de una instancia (self).
Aquí hay un ejemplo de una clase con métodos de clase:
class Student:
school_name = "Python Academy"
student_count = 0
def __init__(self, name):
self.name = name
Student.student_count += 1
@classmethod
def get_school_info(cls):
return f"School: {cls.school_name}, Students: {cls.student_count}"
@classmethod
def create_guest_student(cls):
return cls("Guest")Llama a los métodos de clase utilizando el nombre de la clase:
info = Student.get_school_info()
print(info)Crea algunos estudiantes:
alice = Student("Alice")
bob = Student("Bob")
updated_info = Student.get_school_info()
print(updated_info)Usa métodos de clase como constructores alternativos:
guest = Student.create_guest_student()
print(guest.name)
print(Student.get_school_info())Salida:
School: Python Academy, Students: 0
School: Python Academy, Students: 2
Guest
School: Python Academy, Students: 3Los métodos de clase también se pueden llamar desde las instancias:
alice = Student("Alice")
info_from_instance = alice.get_school_info()
print(info_from_instance)Salida:
School: Python Academy, Students: 1Punto clave: Utiliza @classmethod cuando necesites acceder a los atributos de la clase o crear formas alternativas de construir objetos. El primer parámetro es cls (la clase en sí), no self.
Hoja de referencia
El decorador @classmethod crea métodos que reciben la clase misma como el primer parámetro (cls) en lugar de una instancia (self).
class Student:
school_name = "Python Academy"
student_count = 0
def __init__(self, name):
self.name = name
Student.student_count += 1
@classmethod
def get_school_info(cls):
return f"School: {cls.school_name}, Students: {cls.student_count}"
@classmethod
def create_guest_student(cls):
return cls("Guest")Llama a los métodos de clase utilizando el nombre de la clase:
info = Student.get_school_info()
guest = Student.create_guest_student()Los métodos de clase también se pueden llamar desde las instancias:
alice = Student("Alice")
info_from_instance = alice.get_school_info()Utiliza @classmethod cuando necesites acceder a atributos de clase o crear formas alternativas de construir objetos.
Pruébalo tú mismo
Esta lección no incluye un desafío de código.
Esta 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