Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] O que diferencia método de objeto e de classe?

boa tarde! gostaria de entender um pouco melhor o que exatamente diferencia eu precisar utilizar um método de classe (decorator @classmethod) de um método do objeto? E, seria possível fazer sem deixar desse jeito?

no caso do curso, o listar_restaurantes é um metodo da classe, daria certo sem essa declaração? É uma questão de boas práticas utilizadas isso?

Obrigado desde já.

2 respostas
solução!

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!

obrigado pelo esclarecimento Renan.