Boa noite. Tudo bem?
@limite.setter
só funciona se estiver declarado a propriedade @property
?
Se eu quiser apenas definir o set do limite, ou seja, colocando atribuição ao invés de usar os parênteses
Boa noite. Tudo bem?
@limite.setter
só funciona se estiver declarado a propriedade @property
?
Se eu quiser apenas definir o set do limite, ou seja, colocando atribuição ao invés de usar os parênteses
Oi Fredson, tudo bom?
Acho que não entendi muito bem sua dúvida. Nessa parte:
Se eu quiser apenas definir o set do limite, ou seja, colocando atribuição ao invés de usar os parênteses
Você pode me explicar melhor o que seria exatamente
colocando atribuição ao invés de usar os parênteses
?
A ideia é criar um setter pro limite fazendo a definição do atributo? Como exatamente isso seria feito sem usar os parênteses?
Se você quiser, compartilha com a gente um pseudo-código mostrando a ideia de como seria =)
Aguardo retorno.
Abraço
Na classe Conta temos um método set que defini um valor para o limite
def set__limite(valor):
self.__limite = valor
No programa principal, para setar um valor de 1500 no limite, é necessário que seja chamado o método
set__limite(1500)
Ao invés de chamar um método colocando o valor nos parâmetros posso simplesmente fazer desta forma
limite = 1500
Porém, ao fazer isso, é necessário colocar um decorator ex: @limite.setter
para que eu possa colocar o valor de 1500 por meio de atribuição, como se fosse um atributo, ao invés de passar o valor como parâmetro no método.
A duvida é para eu colocar esse decorator é necessário ter um decorator de propriedade ? @property
Opa, acho que peguei a ideia =)
A duvida é para eu colocar esse decorator é necessário ter um decorator de propriedade ? @property
Resumidamente, sim.
Isso porque, o @*.setter é apenas um açucar sintático para o método todo:
def set__limite(valor):
self.__limite = valor
E, para que o setter possa ser gerado, é necessário que seu atributo não seja apenas um atributo mas sim uma propriedade (Property). O que o python faz é apenas relacionar os dois sintaticamente quando a gente tenta acessar o atributo diretamente.
Isso é necessário porque todos os atributos são públicos por padrão, as properties são a junção do encapsulamento dos métodos com a sintaxe do acesso público. Meio que o melhor dos dois mundos nesse caso =)
Sem a anotação @property no atributo essa conexão não seria possível.
Espero ter ajudado =)
Ah, acho que rolou um mal entendido quanto o @property e o @*.setter, ambos são apenas anotações não decorators. Decorators são um padrão de projeto que você pode estudar aqui:
https://cursos.alura.com.br/course/design-patterns-python/task/9771
Abraço
Valeu André :)