Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Implementar attrgetter dentro ou fora da classe?

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.

2 respostas
solução!

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!!!