venho assistindo as primeiras aulas do oo avançado em python, e me surgiu uma duvida, qual a funcionalidade do @property, e quando devo usar @propperty ou o get_
ATÉ 50% OFF
TÁ ACABANDO!
0 dias
0 horas
0 min
0 seg
venho assistindo as primeiras aulas do oo avançado em python, e me surgiu uma duvida, qual a funcionalidade do @property, e quando devo usar @propperty ou o get_
Olá, Pedro. Tudo bem?
Na programação orientada a objetos existem linguagens que aplicam o conceito de atributos privados, ou seja, são atributos que não podem ser acessados diretamente por um código fora da sua classe de origem. Assim, para acessar externamente um determinado atributo privado, se faz necessário o uso de um método get para obter o seu valor, e um método set para alterar o seu valor.
No Python, apesar de ser possível tornar um atributo privado, normalmente isso não é utilizado. Outra coisa que também não é comum nos códigos Python é o uso dos métodos get e set. Desse modo, para preservar a privacidade do acesso aos atributos por códigos externos, a solução pythônica é o uso das Properties (@property e @nome_atributo.setter).
Assim no Python, o @property é equivalente ao método get e o @nome_atributo.setter é o equivalente ao método set.
Então quando criamos uma property para um atributo é o mesmo de de estarmos criando um método get:
@property
def atributo(self):
return self.__atributo
Mas a diferença é que com o uso do @property temos a vantagem do acesso ao atributo continuar sendo feito no formato usual do Python:
objeto.atributoO mesmo vale para o @nome_atributo.setter ser o equivalente ao método set:
@atributo.setter
def atributo(self, novo_valor)
self.__atributo = novo_valorAssim, é possível modificar o valor do atributo da forma usual, mas garantindo a privacidade do atributo:
objeto.atributo = novo_valorVocê vai criar um @property para um atributo sempre que precisar acessar esse atributo em algum código fora da sua classe de origem. Seguindo a mesma ideia, você criará um @nome_atributo.setter sempre que precisar modificar esse atributo fora da sua classe.
Espero ter ajudado. Qualquer outra dúvida estou a disposição.
Grande abraço. Bons Estudos!