Ir para conteúdo
Fórum Script Brasil
  • 0

Método __add__


Guilherme Bornia

Pergunta

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?

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

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

 

Link para o comentário
Compartilhar em outros sites

  • 0
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?

Link para o comentário
Compartilhar em outros sites

  • 0

@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  :)

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...