class Estudante:
escola = "DIO"
def __init__(self, nome, matricula):
self.nome = nome
self.matricula = matricula
def __str__(self) -> str:
return f"{self.nome} - {self.matricula} - {self.escola}"
def mostrar_valores(*objs):
for obj in objs:
print(obj)
aluno_1 = Estudante("Guilherme", 1)
aluno_2 = Estudante("Giovanna", 2)
mostrar_valores(aluno_1, aluno_2)
Estudante.escola = "Python"
aluno_3 = Estudante("Chappie", 3)
mostrar_valores(aluno_1, aluno_2, aluno_3)
Métodos de classe são ligados à classe e não para o objeto. Eles têm acesso ao estado da classe, pois recebem um parâmetro que aponta para a classe e não para a instância do objeto.
Um método estático não receb um primeiro argumento explícito. Ele também é um método vinculado à classe e não ao objeto da classe. Este método não pode acessar ou modificar o estado da classe. Ele está presente em uma classe porque faz sentido que o método esteja presente na classe.
class Pessoa:
def __init__(self, nome, idade):
self.nome = nome
self.idade = idade
@classmethod
def criar_de_data_nascimento(cls, ano, mes, dia, nome):
idade = 2022 - ano
return cls(nome, idade)
@staticmethod
def e_maior_idade(idade):
return idade >= 18
p = Pessoa.criar_de_data_nascimento(1994, 3, 21, "Guilherme")
print(p.nome, p.idade)
print(Pessoa.e_maior_idade(18))
print(Pessoa.e_maior_idade(8))