Guilherme Bornia Postado Março 8, 2017 Denunciar Share Postado Março 8, 2017 Boa noite galera, Estou aprendendo Python e me deparei com esse método e eu queria saber como faço para somar múltiplos objetos de uma vez. Por exemplo, somar conta1 + conta2 + conta3 Tentei implementar dessa forma def __add__(self, *conta): for i in conta: self.saldo += i.saldo mas não funcionou. Alguém poderia me ajudar com isso por favor? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 SoaresBruno Postado Março 8, 2017 Denunciar Share Postado Março 8, 2017 Fala @Guilherme Bornia, blz? Você não descreveu a sua classe inteira e nem o contexto do programa, mas eu fiz um exemplo abaixo que pode servir, veja se é isso mesmo: class Conta: def __init__(self, id): self.id = id self.saldo = 0 def define_saldo(self, novo_saldo): self.saldo = novo_saldo def __add__(self, conta): return self.saldo + conta.saldo def __radd__(self, saldo): return self.saldo + saldo c1 = Conta(1) c1.define_saldo(10) c2 = Conta(2) c2.define_saldo(20) c3 = Conta(3) c3.define_saldo(30) print(c1 + c2) # Printa 30 print sum([c1, c2, c3]) # Printa 60 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guilherme Bornia Postado Março 8, 2017 Autor Denunciar Share Postado Março 8, 2017 56 minutos atrás, SoaresBruno disse: Fala @Guilherme Bornia, blz? Você não descreveu a sua classe inteira e nem o contexto do programa, mas eu fiz um exemplo abaixo que pode servir, veja se é isso mesmo: class Conta: def __init__(self, id): self.id = id self.saldo = 0 def define_saldo(self, novo_saldo): self.saldo = novo_saldo def __add__(self, conta): return self.saldo + conta.saldo def __radd__(self, saldo): return self.saldo + saldo c1 = Conta(1) c1.define_saldo(10) c2 = Conta(2) c2.define_saldo(20) c3 = Conta(3) c3.define_saldo(30) print(c1 + c2) # Printa 30 print sum([c1, c2, c3]) # Printa 60 @SoaresBruno Muito obrigado por ter resolvido meu problema! Agora eu só peço, se puder, para me explicar o porquê de ter inserido o método __radd__ e como Python funciona, baseando-se no exemplo que você deu, ao ler a linha de código a seguir total = c1 + c2 + c3 Por que sem __radd__ dá erro e por que com este método dá certo? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 SoaresBruno Postado Março 9, 2017 Denunciar Share Postado Março 9, 2017 @Guilherme Bornia isso eu não posso contar cara... rsrs Brincadeiras a parte, segue a explicação: Quando você tem uma classe com o método __add__ você espera poder somar algo à aquele objeto, como por exemplo "conta1 + conta2", certo? Nesse caso, o que Python está fazendo é "conta1.__add__(conta2)", correto? Porém quando você somou os 2 primeiros objetos, o resultado disso foi um inteiro (conta1 + conta2 = 30). Então para a terceira soma ficou "30 + conta3", em Python isso significa "(30).__add__(conta3"). Como você deve imaginar, o inteiro "30" não sabe somar utilizando o seu objeto, então o Python vai buscar o right-hand operator, conhecido como __radd__, da sua classe Conta, que no caso inicial não havia sido implementada e por isso falhava. Espero que tenha ficado claro :) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guilherme Bornia Postado Março 9, 2017 Autor Denunciar Share Postado Março 9, 2017 @SoaresBruno Cara, entendi perfeitamente! Muito obrigado mesmo, me ajudou muito! Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Guilherme Bornia
Boa noite galera,
Estou aprendendo Python e me deparei com esse método e eu queria saber como faço para somar múltiplos objetos de uma vez. Por exemplo, somar
Tentei implementar dessa forma
mas não funcionou.
Alguém poderia me ajudar com isso por favor?
Link para o comentário
Compartilhar em outros sites
4 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.