Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Prints de objetos

Eu tava testando umas coisas e percebi que não conseguimos printar, normalmente, o nosso objeto por inteiro.

class Conta:
    def __init__(self, numero, titular, saldo, limite):
        print("Construindo objeto ... {}".format(self))
        self.numero = numero
        self.titular = titular
        self.saldo = saldo
        self.limite = limite
    def extrato(self):
        print("Saldo de {} do titular {}".format(self.saldo, self.titular))

conta = Conta(123, "joao", 100, 500)
Construindo objeto ... <__main__.Conta object at 0x000002089EC0B220>

print(conta)
<__main__.Conta object at 0x000002089EC0B220>

Nesse exemplo, o objeto 'conta', retorna o endereço na memória de onde está a classe.

conta = {"numero": 123, "titular": 'joao', "saldo": 500, "limite": 1000}
print(conta)
{'numero': 123, 'titular': 'joao', 'saldo': 500, 'limite': 1000}

Nesse, ele já imprime o objeto em si.

Gostaria de saber do porquê o python não printa o objeto em si como em outras linguagens como por exemplo o JS

const diretor = new Diretor("joao", 10000, 12345678900);
diretor.cadastrarSenha("123456");

console.log(diretor)


Output: Diretor {
  _nome: 'joao',
  _salario: 10000,
  _cpf: 12345678900,
  _bonificacao: 2,
  _senha: '123456'
}

E como eu faria para imprimir tudo, sem ser cara parâmetro por vez

Obrigado!

1 resposta
solução!

Olá Joao, tudo certo?

Para voce imprimir objetos em Python, assim como em outras linguagens (como o Java) voce deve implementar um metodo para que a linguagem saiba o que imprimir caso uma chamada no print() seja feita. Voce deve transformar a instancia do objeto para string para que o metodo print seja capaz de realizar essa impressao.

Por exemplo em Java, para voce especificar as informacoes que serao impressas no print, devemos implementar o método toString() na classe do objeto. Em Python o equivalente ao toString() existe o dunder (metodo magico) __str__. Ele recebe apenas o self como parametro e retorna o que seria essa representacao de string do objeto. Vou implementar utilizando seu codigo como exemplo para ficar mais facil o entendimento.

Dentro da classe Conta se voce colocar isso aqui:

def __str__ (self):
        return f' Esse é meu objeto: [{self.numero}, {self.titular}, {self.saldo}, {self.limite}

A saida de um print(instancia_da_conta) será:

Esse é meu objeto: [123, 'Joao', 2000, 1000]

Obs: utilizei dados aleatorios na instancia da conta

Caso queira ler um pouco mais do assunto:

Espero ter ajudado, abraços