Estou começando a codificar em vários projetos usando Python (incluindo desenvolvimento web Django e desenvolvimento de jogos Panda3D).
Para me ajudar a entender o que está acontecendo, gostaria basicamente de 'olhar' dentro dos objetos Python para ver como eles funcionam - como seus métodos e propriedades.
Então, digamos que eu tenho um objeto Python, o que eu precisaria para imprimir seu conteúdo? É mesmo possível?
python
introspection
littlejim84
fonte
fonte
object.__dict__
fonte
vars(object)
é feito para isso.from pprint import pprint; pprint(vars(object))
me deu uma visão muito boa do conteúdo do meu objeto. Obrigado @liberforcePrimeiro, leia a fonte.
Segundo, use a
dir()
funçãofonte
Estou surpreso que ninguém tenha mencionado a ajuda ainda!
A Ajuda permite que você leia a documentação e tenha uma idéia de quais atributos uma classe pode ter, o que é bastante útil.
fonte
Se for para exploração para ver o que está acontecendo, eu recomendo olhar para o IPython . Isso adiciona vários atalhos para obter a documentação, as propriedades e até o código fonte dos objetos. Por exemplo, anexando um "?" para uma função fornecerá a ajuda para o objeto (efetivamente um atalho para "help (obj)", enquanto o uso de dois? 's ("
func??
") exibirá o código fonte, se estiver disponível.Também existem muitas conveniências adicionais, como preenchimento de guias, impressão bonita de resultados, histórico de resultados etc. que o tornam muito útil para esse tipo de programação exploratória.
Para uso mais programático de introspecção, os builtins básicos como
dir()
,vars()
,getattr
etc vai ser útil, mas é bem vale o seu tempo para verificar a inspecionar módulo. Para buscar a fonte de uma função, use "inspect.getsource
" por exemplo, aplicando-a a si mesma:inspect.getargspec
também é frequentemente útil se você estiver lidando com a quebra ou manipulação de funções, pois fornecerá os nomes e os valores padrão dos parâmetros de função.fonte
Se você estiver interessado em uma GUI para isso, dê uma olhada no objbrowser . Ele usa o módulo de inspeção da biblioteca padrão do Python para a introspecção de objetos abaixo.
fonte
Você pode listar os atributos de um objeto com dir () no shell:
Obviamente, também existe o módulo de inspeção: http://docs.python.org/library/inspect.html#module-inspect
fonte
fonte
Tente ppretty
Resultado:
fonte
Outros já mencionaram o dir () interno que soa como o que você está procurando, mas aqui está outra boa dica. Muitas bibliotecas - incluindo a maioria da biblioteca padrão - são distribuídas na forma de origem. Ou seja, você pode facilmente ler o código-fonte diretamente. O truque está em encontrá-lo; por exemplo:
O arquivo * .pyc é compilado, então remova o 'c' à direita e abra o arquivo * .py não compilado no seu editor ou visualizador de arquivos favorito:
Achei isso incrivelmente útil para descobrir coisas como quais exceções são geradas a partir de uma determinada API. Esse tipo de detalhe raramente é bem documentado no mundo Python.
fonte
Embora
pprint
já tenha sido mencionado por outras pessoas, eu gostaria de adicionar algum contexto.pprint
pode estar em alta demanda por desenvolvedores com experiência em PHP que procuram uma alternativa paravar_dump()
.Objetos com um atributo dict podem ser despejados muito bem usando o método
pprint()
mixed withvars()
, que retorna o__dict__
atributo para um módulo, classe, instância, etc .:Portanto, não há necessidade de um loop .
Para despejar todas as variáveis contidas no escopo global ou local, basta usar:
locals()
mostra variáveis definidas em uma função.Também é útil acessar funções com o nome correspondente como uma chave de cadeia, entre outros usos :
Da mesma forma, use
dir()
para ver o conteúdo de um módulo ou os atributos de um objeto.E ainda há mais.
fonte
Se você quiser examinar parâmetros e métodos, como outros já apontaram, você pode usar
pprint
oudir()
Se você quiser ver o valor real do conteúdo, pode fazer
object.__dict__
fonte
Duas ótimas ferramentas para inspeção de código são:
IPython . Um terminal python que permite inspecionar usando o preenchimento de guias.
Eclipse com o plugin PyDev . Possui um excelente depurador que permite que você quebre em um determinado local e inspecione objetos navegando em todas as variáveis como uma árvore. Você pode até usar o terminal incorporado para tentar código nesse local ou digitar o objeto e pressionar '.' para dar dicas de código para você.
fonte
pprint e dir juntos funcionam muito bem
fonte
Existe uma compilação da biblioteca de códigos python apenas para esse propósito: inspecionar Introduzido no Python 2.7
fonte
Se você estiver interessado em ver o código fonte da função correspondente ao objeto
myobj
, digiteiPython
ouJupyter Notebook
:myobj??
fonte
ou
fonte
Se você deseja procurar dentro de um objeto ativo, o
inspect
módulo do python é uma boa resposta. Em geral, ele funciona para obter o código fonte das funções definidas em um arquivo fonte em algum lugar do disco. Se você deseja obter a fonte de funções ativas e lambdas que foram definidas no intérprete, você pode usardill.source.getsource
fromdill
. Ele também pode obter o código de métodos e funções de classe vinculados ou não definidos definidos em curries ... no entanto, talvez você não consiga compilar esse código sem o código do objeto que o encerra.fonte
vars (obj) retorna os atributos de um objeto.
fonte
Além disso, se você quiser procurar na lista e nos dicionários, use pprint ()
fonte
Muitas dicas boas já, mas a mais curta e fácil (não necessariamente a melhor) ainda não foi mencionada:
fonte
Tente usar:
object
é o nome da variável do objeto que você está tentando inspecionar.Isso imprime uma saída bem formatada e com guias, mostrando toda a hierarquia de chaves e valores no objeto.
NOTA: Isso funciona em python3. Não tenho certeza se funciona em versões anteriores
UPDATE: Isso não funciona em todos os tipos de objetos. Se você encontrar um desses tipos (como um objeto Request), use um dos seguintes procedimentos:
dir(object())
ou
import pprint
então:pprint.pprint(object.__dict__)
fonte