Olá, Ali! Como vai?
Entendo sua dúvida, e é realmente um ponto importante para entender a Orientação a Objetos em Python.
Métodos de objeto e métodos de classe são diferentes em como eles interagem com os dados da classe.
Os métodos de objeto, como o alternar_estado()
no exemplo do curso, são chamados em uma instância (objeto) da classe e têm acesso aos atributos e métodos dessa instância específica. Isso significa que eles operam em um nível de instância. No exemplo, alternar_estado()
muda o estado do objeto restaurante_praca
.
Por outro lado, os métodos de classe, como listar_restaurantes()
, são chamados na classe em si, e não em uma instância da classe. Eles não têm acesso aos atributos de uma instância específica da classe, mas têm acesso aos atributos da classe. No exemplo, listar_restaurantes()
lista todos os restaurantes que foram criados, independentemente da instância.
Sobre a sua pergunta se seria possível fazer sem deixar desse jeito, sim, é possível. No entanto, o uso de métodos de classe e de objeto ajuda a organizar o código e torná-lo mais legível e fácil de manter. É uma questão de boas práticas, como você mencionou.
No caso do método listar_restaurantes()
, se não usássemos o @classmethod
, teríamos que criar uma instância da classe para chamar esse método, o que não faz muito sentido, pois esse método não está operando em uma instância específica da classe.
Espero ter ajudado e bons estudos!