Digo isso pq se a implementação for fora da classe a boa prática de não acessar atributo privado é quebrada. Sendo assim creio que a dúvida é gerada por conta da falta de especificação quando da implementação do attrgetter.
Digo isso pq se a implementação for fora da classe a boa prática de não acessar atributo privado é quebrada. Sendo assim creio que a dúvida é gerada por conta da falta de especificação quando da implementação do attrgetter.
Oi Antonio, como vai? Espero que esteja bem ^-^
Esse é um bom questionamento. Neste caso, o problema é conseguirmos pegar o valor de _saldo
diretamente, o que não é uma boa prática. Usando o attrgetter estamos pegando o valor indiretamente, ou seja, usamos uma ponte para chegarmos ao valor que precisamos, seria o mesmo caso de utilizar uma property para retornar o valor de _saldo, onde usamos uma "ponte" para retornar o atributo "privado". O que pode ter ficado estranho é utilizar dessa tática fora da classe e quanto a isso, no geral não é uma boa prática. Porém, podemos utilizar o attrgetter para devolver uma property, o que seria ideal nesse caso. Veja:
import operator
class ContaSalario:
def __init__(self, codigo):
self.codigo = codigo
codigo = property(operator.attrgetter("_codigo"))
@codigo.setter
def codigo(self, cod):
print("Chamando setter")
self._codigo = cod
É uma solução bem elegante. Creio que a ideia do instrutor ao mostrar o uso desse operador foi expandir os horizontes. Lembrando que o attrgetter também pode retornar o valor de mais de um atributo.
Qualquer coisa estou por aqui.
Abraços e bons estudos!
Boa. Achei muito aderente ao paradigma essa solução que vc apresentou. Show!!!