Decorador de Método de Classe
Parte da seção Object Oriented Programming do Journey de Python da Coddy — lição 12 de 64.
O decorador @classmethod cria métodos que recebem a própria classe como o primeiro parâmetro (cls) em vez de uma instância (self).
Aqui está um exemplo de uma classe com métodos de classe:
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")Chame métodos de classe usando o nome da classe:
info = Student.get_school_info()
print(info)Crie alguns estudantes:
alice = Student("Alice")
bob = Student("Bob")
updated_info = Student.get_school_info()
print(updated_info)Use métodos de classe como construtores alternativos:
guest = Student.create_guest_student()
print(guest.name)
print(Student.get_school_info())Saída:
School: Python Academy, Students: 0
School: Python Academy, Students: 2
Guest
School: Python Academy, Students: 3Métodos de classe também podem ser chamados a partir de instâncias:
alice = Student("Alice")
info_from_instance = alice.get_school_info()
print(info_from_instance)Saída:
School: Python Academy, Students: 1Ponto Chave: Use @classmethod quando você precisar acessar atributos da classe ou criar formas alternativas de construir objetos. O primeiro parâmetro é cls (a própria classe), não self.
Folha de consulta
O decorador @classmethod cria métodos que recebem a própria classe como o primeiro parâmetro (cls) em vez de uma instância (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")Chame métodos de classe usando o nome da classe:
info = Student.get_school_info()
guest = Student.create_guest_student()Métodos de classe também podem ser chamados a partir de instâncias:
alice = Student("Alice")
info_from_instance = alice.get_school_info()Use @classmethod quando precisar acessar atributos de classe ou criar formas alternativas de construir objetos.
Experimente você mesmo
Esta lição não inclui um desafio de código.
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Object Oriented Programming
1Fundamentos de POO
Arquivos ExternosIntrodução à POOClasses vs ObjetosO Parâmetro selfMétodosAtributosMétodo Construtor (__init__)Recapitulação - Calculadora Simples4Herança
Herança BásicaA Função super()Sobrescrita de MétodoHerança MúltiplaOrdem de Resolução de MétodosRecapitulação - Hierarquia de Funcionários7Métodos Especiais
Introdução aos Métodos MágicosSobrecarga de OperadoresMétodos Mágicos de ContêinerRecapitulação - Lista Personalizada10Padrões de Projeto Parte 1
Introdução a Padrões de ProjetoPadrão SingletonPadrão FactoryPadrão ObserverPadrão Strategy2Decoradores
Introdução aos DecoradoresDecorador de PropriedadeDecorador de Método EstáticoDecorador de Método de Classe5Polimorfismo
Sobrescrita de Método RevisitadaDuck TypingClasses e Métodos AbstratosDesign de InterfacesRecapitulação - Calculadora de Formas8Conceitos Avançados de POO
Composição vs HerançaMixinsMétodos Estáticos e de ClasseDecoradores de ClasseGerenciadores de Contexto11Padrões de Projeto Parte 2
Padrão CommandPadrão AdapterPadrão DecoratorPadrão Template MethodPadrão StatePadrão Composite3Propriedades de Classe
Variáveis de Instância vs de ClasseDecoradores de PropriedadeAtributos PrivadosRecapitulação - Gerenciador de Conta Bancária6Encapsulamento
Membros Públicos, Protegidos e PrivadosModificadores de AcessoOcultação de InformaçãoProperty Decorators AvançadosRecapitulação - Sistema de Registro de Alunos12Projeto: Gerenciamento de Biblioteca
Visão Geral do ProjetoClasses Livro e Usuário