Estou aprendendo as cordas em Python. Quando tento imprimir um objeto de classe Foobar
usando a print()
função, recebo uma saída como esta:
<__main__.Foobar instance at 0x7ff2a18c>
Existe uma maneira de definir o comportamento de impressão (ou a representação de cadeias ) de uma classe e seus objetos ? Por exemplo, quando eu chamo print()
um objeto de classe, gostaria de imprimir seus membros de dados em um determinado formato. Como conseguir isso em Python?
Se você estiver familiarizado com as classes C ++, é possível obter o padrão acima ostream
adicionando um friend ostream& operator << (ostream&, const Foobar&)
método para a classe.
Como Chris Lutz mencionou , isso é definido pelo
__repr__
método em sua classe.A partir da documentação de
repr()
:Dada a seguinte classe Teste:
..it agirá da seguinte maneira no shell Python:
Se nenhum
__str__
método é definido,print(t)
(ouprint(str(t))
) vai usar o resultado de__repr__
, em vezSe nenhum
__repr__
método for definido, o padrão será usado, o que é praticamente equivalente a ..fonte
__str__
é diferente dos resultados do shell interativo que você fornece. : P%
formatação da string não está obsoleta, de docs.python.org/whatsnew/2.6.html "o operador% é complementado por um método mais poderoso de formatação de string, format ()"%
sido muito conveniente.Uma maneira genérica que pode ser aplicada a qualquer classe sem formatação específica pode ser feita da seguinte maneira:
E depois,
produz
fonte
Se você estiver em uma situação como @Keith, tente:
Isso vai contra o que eu consideraria um bom estilo, mas se você estiver apenas tentando depurar, deve fazer o que quiser.
fonte
Apenas para adicionar meus dois centavos à resposta do @ dbr, a seguir está um exemplo de como implementar esta frase a partir da documentação oficial que ele citou:
Dada esta definição de classe:
Agora, é fácil serializar a instância da
Test
classe:Então, executando o último pedaço de código, obteremos:
Mas, como eu disse no meu último comentário: mais informações estão aqui !
fonte
Você precisa usar
__repr__
. Esta é uma função padrão como__init__
. Por exemplo:fonte
Uma versão mais bonita da resposta de @ user394430
Produz lista visualmente agradável de nomes e valores.
Uma versão ainda mais sofisticada (graças ao Ruud) classifica os itens:
fonte
Para Python 3:
Se o formato específico não for importante (por exemplo, para depuração), basta herdar da classe Printable abaixo. Não há necessidade de escrever código para cada objeto.
Inspirado por esta resposta
fonte
Já existem muitas respostas neste tópico, mas nenhuma delas me ajudou particularmente, eu tive que resolver isso sozinho, então espero que este seja um pouco mais informativo.
Você só precisa ter parênteses no final da sua aula, por exemplo:
Aqui está um exemplo de código de um projeto no qual eu estava trabalhando:
Para imprimir minha classe de hidrogênio, usei o seguinte:
Observe que isso não funcionará sem os parênteses no final do hidrogênio. Eles são necessários.
Espero que isso ajude, deixe-me saber se você tiver mais perguntas.
fonte