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_
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.atributo
O mesmo vale para o @nome_atributo.setter
ser o equivalente ao método set
:
@atributo.setter
def atributo(self, novo_valor)
self.__atributo = novo_valor
Assim, é possível modificar o valor do atributo da forma usual, mas garantindo a privacidade do atributo:
objeto.atributo = novo_valor
Você 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!