Olá, José. 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 que seja possível acessar externamente um determinado atributo privado, utilizamos 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, na aula o instrutor primeiramente mostra como fazer o acesso através dos métodos get
e set
, para que seja introduzido o conceito. E depois ele mostra a forma que isso é feita especificamente no Python, com o uso das properties.
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!