3
respostas

Duvida dos @

cara, eu nao entendi 100% @classmethod, @property, @abstractmethod, e tem ainda @staticmethod.

A minha duvida é qual situaçao devo usar, ou nao. Para que serve em um caso, ou nao.

por exemplo, usando pela aula do Restaurante e talz, tem @classmethod, e pq tem a necessidade de usar isso? que momentos devo usar isso? o que ela muda o def?

entao o property, eu nao sei se eu entendi muito bem, eu acredito que declara aquela informaçao apenas como ler, mas ainda assim eu nao entendi, o que ela proibe ou permite, ou devo sempre usar?

e no caso do staticmathod ainda nao cheguei na aula, entao ok

abstractmethod, novamente, o que ele diferencia? pq precisa? O que impede de colocar apesar def adicionar_desconto sem precisar deste metodo?

3 respostas

Olá, Caio! Como vai?

Sei que esses conceitos podem ser um pouco complexos no início, para mim também foi quando comecei a estudar, mas vou tentar esclarecê-los para você de uma forma clara e direta.

  1. @classmethod: este decorador é utilizado quando queremos que um método pertença à classe e não a uma instância da classe. Ele pode ser chamado tanto por uma instância quanto diretamente pela classe. Um exemplo prático seria um método que conta quantas instâncias de uma classe foram criadas. Este método pertenceria à classe como um todo, e não a uma instância específica.

  2. @property: Já esse, é usado para criar métodos de acesso (getters) e definição (setters) para atributos de uma classe. Ele permite que você acesse um método como se fosse um atributo, sem precisar usar parênteses. Por exemplo, se tivermos um atributo idade e quisermos garantir que apenas valores positivos sejam atribuídos a ele, poderíamos usar @property para criar um método getter e um método setter que verifica essa condição.

  3. @abstractmethod: este é utilizado em conjunto com a classe ABC para criar classes abstratas. Uma classe abstrata é uma classe que não pode ser instanciada e serve como um modelo para outras classes. O @abstractmethod é usado para definir métodos que devem ser implementados pelas classes que herdam da classe abstrata. No exemplo da aula, @abstractmethod é usado para garantir que todas as classes que herdam de ItemCardapio implementem o método aplicar_desconto.

  4. @staticmethod: por fim, esse é tem como função criar métodos que pertencem à classe e não acessam ou modificam nenhuma instância específica da classe. Eles são úteis quando você tem algum código que se encaixa na classe, mas que não precisa de uma instância da classe para funcionar.

Espero que essas explicações tenham ajudado a esclarecer a utilidade desses decoradores. Lembre-se, a escolha de usá-los depende muito do contexto e dos requisitos do seu código, e com o tempo você vai entender em que contexto cada uma se encaixa, não tenha pressa, pois adquirir conhecimento leva tempo.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Caramba, eu realmente acho que piorou.

o classmethod eu continua nao entendo, seria bom um exemplo de porque eu deveria usar esse decorador. Tipo, qual o momento no trabalho, na hora de programar eu ver 'vou usar esse decorador pq faz sentido' e nao por ser costume. Ate pq, desde a primeira vez q demostrou esse decorador, dava a entender que usar ele ou nao, nao ia mudar em nada(ou quase nada) na programacao.

property, agora eu tenho certeza absoluta que nao entendi nada e basicamente eh a mesma questao do classmethod

abstractmethod esse eh oq menos entendi, ja q estava parecendo estar tudo funcionando o tempo todo antes de decorador

e o staticmethod nao apareceu na aula, mas acho que vai continuar na mesma

Eu entendo que tem varias coisas que vou pegar o jeito que posso usar, mas ja foram varias aulas passadas e ainda fico sem entender e medo de continuar mais ainda de continuar ate o final e ainda nao entender 100% esses decoradores(trauma de uma faculdade). Num eh possivel que sou o unico que nao conseguiu entender esses decoradores, e pra que eles servem e tudo. Detahe, eu falo 'decorador' pq falam isso, mas nao sei o que significa neste caso. Ele embeleza? memoriza? alinha? tudo ao mesmo tempo? E to me sentindo ser o unico que esta com problema de entender isso kkk

Caio, Fique tranquilo, você não é o único que esta com duvidas a partir e nesta parte.

Estou ate procurando em outros lugares para ver se melhora o entendimento. Tenta fazer isso também, vai que melhora.

Boa sorte ai!