Em [[Linguagem de programação Python|Python]], podemos definir métodos dentro de uma [[Classes em Python|classe]] que podem ser chamados diretamente na classe, sem a necessidade de criar uma instância (objeto) da classe. Isso é feito usando o decorador `@classmethod`. **Explicação:** * **Métodos de instância:** São os métodos que normalmente usamos em classes. Eles recebem `self` como primeiro argumento, que representa a instância do objeto. Precisamos criar um objeto da classe para chamar esses métodos. * **Métodos de classe:** São decorados com `@classmethod`. Eles recebem `cls` como primeiro argumento, que representa a própria classe. Podemos chamar esses métodos diretamente na classe, sem precisar de um objeto. **Exemplo:** ```python import random class Hat: Houses = ["Gryffindor", "Hufflepuff", "Ravenclaw", "Slytherin"] @classmethod def sort(cls, name): print(f"{name} is in {random.choice(cls.Houses)}") Hat.sort("Harry") # Output: Harry is in Slytherin (ou outra casa aleatória) ``` * `@classmethod`: Este decorador indica que o método `sort` é um método de classe. * `cls`: Representa a classe `Hat`. * `Hat.sort("Harry")`: Chamamos o método `sort` diretamente na classe `Hat`, sem criar um objeto `Hat`. **Quando usar métodos de classe?** * Quando você precisa de um método que opere na classe em si, em vez de em uma instância da classe. * Para criar métodos de fábrica, que retornam instâncias da classe (ou de subclasses). * Para acessar ou modificar atributos da classe. **Referência:** * [Página de Classes Python da W3schools](https://www.w3schools.com/python/python_classes.asp)