Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Diferença entre Property e Getters

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_

1 resposta
solução!

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!

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