1
resposta

Estou tentando usar o attrgatter no meu código, mas não roda

class ContaSalario: def init(self, codigo): self.codigo = codigo self.saldo = 0

def __eq__(self, outro):
    if type(outro) != ContaSalario:
        return False

    return self._codigo == outro._codigo and self._saldo == outro._saldo
def deposita(self, valor):
    self._saldo += valor

def __str__(self):
    return "[>>Codigo {} Saldo {}<<]".format(self._codigo, self._saldo)

lulu = ContaSalario(88) lulu.deposita(500) print(lulu) kaka = ContaSalario(55) kaka.deposita(100) contas = [kaka, lulu] from operator import attrgetter for conta in sorted(contas, Key=attrgetter('_saldo')): print(contas)

1 resposta

Olá Luigge, tudo certo?

Copiei o seu codigo aqui para o meu editor e fiz algumas mudanças para que ele funcionasse. Vou listar as mudancas aqui ok?

  1. Na sua declaracao do metodo init, como ele é um dunder (metodo magico) ele deve ser escrito de forma especial, tendo dois underlines como prefixo e como sufixo, assim __init__. Fazendo isso voce ajeita a inicializacao da sua classe.
  2. Ainda no metodo init, a declaracao dos seus atributos self.codigo e self.saldo não estava na convencao para deixa-los privados. Portanto voce deveria adicionar um underline como prefixo dos atributos, ficando assim self._codigo e self._saldo. Colocando esses underlines voce esta dizendo que esses atributos sao privados e nao devem ser acessados de forma direta fora da sua classe. Dessa forma voce tambem mantem o padrao do resto do codigo que estava escrito usando os atributos com o underline. Alem disso voce corrige o nome que voce havia passado como parametro no metodo attrgetter('_saldo').
  3. Dentro do seu sorted a palavra "Key" deve ser digitada com toda em minusculo porque o python é uma linguagem case sensitive, ou seja, ele diferencia letras maisculas de letras minusculas. Vou deixar um link de uma discussao stackoverflow falando um pouco sobre esse "case sensitive" das linguagens de programacao.
  4. Dentro do seu for o print(contas) deve ser print(conta) no singular, pois voce quer imprimir por vez apenas uma conta dentro da lista de contas que voce passou.

Links:

Espero ter ajudado, abraços.