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

Método imprimir não imprime quando é chamado pelo terminal

Olá, ao fazer o exercício 11 da aula 8, percebi que se executo o seguinte código pelo terminal, a saída não é a esperada:

>>> from models import Data
>>> data = Data(1,1,1)
>>> data.imprime
<bound method Data.imprime of <models.Data instance at 0x7f463d13ce60>>

Mas se eu executo por um arquivo .py, a saída acaba sendo a esperada. Conteúdo do arquivo teste.py:

from models import Data

data = Data(1,1,1)
data.imprime()

Saída ao executar no terminal python teste.py:

1/1/1

Conteúdo do arquivo models.py:

# -*- coding: utf-8 -*-

class Perfil():
    def __init__(self, nome, telefone, empresa):
        self.nome = nome
        self. telefone = telefone
        self.empresa = empresa

    def imprime(self):
        print "nome: %s telefone: %s empresa: %s" %(self.nome, self.telefone, self.empresa)

class Data():
    def __init__(self, d, m, a):
        self.dia = d
        self.mes = m
        self.ano = a

    def imprime(self):
        print "%s/%s/%s" %(self.dia, self.mes, self.ano)

Alguém pode me explicar o porquê de funcionar em apenas um dos casos?

3 respostas
solução!

Não manjo de python, mas no exemplo do terminal, não faltou os parênteses no final da invocação do método?

Antonio, quando você executou o código no terminal, esqueceu dos () que efetivamente chamam o método. Note que no arquivo teste.py você lembrou dos parênteses (última linha), e por isso deu tudo certo - você executou o método, não só viu o seu valor (como fez no terminal).

Abraços e bons estudos!

Nossa, verdade! Obrigado.