Oii Francisco, como você está? Espero que esteja bem ^-^
Sinto muito pela demora em obter um retorno.
Para exemplificar melhor, irei apresentar a classe "Pessoa"
:
from datetime import date
class Pessoa:
def __init__(self, nome, idade):
self.nome = nome
self.idade = idade
@classmethod
def ano_de_nascimento(cls, nome, ano):
return cls(nome, date.today().year - ano)
@staticmethod
def adulto(idade):
return idade > 18
No método estático demarcado pelo decorator "staticmethod", observe que não utilizamos a referência para o objeto, ou seja, a palavrinha "self"
e nem a referência de classe "cls"
, veja que ele recebe apenas um parâmetro que se refere ao argumento que ele espera receber, nesse caso, a idade. Outra peculiaridade de um método estático é que não precisamos instanciar a classe para utilizá-lo, podemos chamá-lo diretamente (isso ficará claro no exemplo de chamada desse método).
E isso ocorre porque um método estático não pode modificar o estado do objeto nem o estado da classe, ele funciona como uma espécie de método utilitário. No caso do exemplo de código acima, queremos apenas saber se uma determinada idade de uma pessoa pode ser considerada adulta ou não, então não precisamos necessariamente termos um objeto para isso. Veja como fica o uso desse método:
print(f'É adulto? {Pessoa.adulto(23)}')
print(f'É adulto? {Pessoa.adulto(17)}')
#Resultado:
É adulto? True
É adulto? False
Já o método de classe que recebe como parâmetro a palavrinha "cls"
pode modificar e acessar atributos da classe. Ele é muito utilizado para o uso de construtores de classe alternativos. Observe no código que inicialmente para instanciar um objeto da classe "Pessoa"
é necessário passarmos o nome e a idade . Porém, ao utilizar um método de classe podemos instanciar um objeto de modo diferente, e nesse caso, iremos passar o nome e o ano de nascimento da pessoa. Veja:
# instanciando normal
pessoa1 = Pessoa("Nádia", 21)
# instanciando a partir do método de classe
pessoa2 = Pessoa.ano_de_nascimento("Nádia", 1999)
print(pessoa2.idade)
Por fim, um resumo:
Qualquer estou por aqui, tá bom?
Grande abraço!