Eu tenho um módulo python instalado no meu sistema e gostaria de ver quais funções / classes / métodos estão disponíveis nele.
Eu quero chamar a função doc em cada um. Em ruby, posso fazer algo como ClassName.methods para obter uma lista de todos os métodos disponíveis nessa classe. Existe algo semelhante em python?
por exemplo. algo como:
from somemodule import foo
print foo.methods # or whatever is the correct method to call
python
reflection
module
inspect
Chris Gow
fonte
fonte
Respostas:
O
inspect
módulo Veja também opydoc
módulo, ahelp()
função no intérprete interativo e apydoc
ferramenta de linha de comando que gera a documentação que você procura. Você pode simplesmente dar a eles a classe da qual deseja ver a documentação. Eles também podem gerar, por exemplo, saída HTML e gravá-la no disco.fonte
ast
módulo em determinadas situações na minha resposta .dir
para retornar funções e variáveis; useinspect
para filtrar apenas funções; e useast
para analisar sem importar.Você pode usar
dir(module)
para ver todos os métodos / atributos disponíveis. Verifique também PyDocs.fonte
dir()
função “tenta produzir as informações mais relevantes, e não completas”. Fonte: docs.python.org/library/functions.html#dir .inspect
.Depois de
import
editar o módulo, você pode:... Para obter os documentos de todas as funções de uma só vez, interativamente. Ou você pode usar:
... Para simplesmente listar os nomes de todas as funções e variáveis definidas no módulo.
fonte
inspect
módulo também pode listar variáveis, mesmo que não sejam explicitamente solicitadas aqui. Essa solução requer apenas objetos internos, o que pode ser muito útil em alguns casos em que o Python é instalado em um ambiente restrito / bloqueado / quebrado.dir
iria imprimir os resultados, no entanto, parece que você precisa fazerprint(dir(modulename))
.Um exemplo com inspecionar:
getmembers retorna uma lista de tuplas (object_name, object_type) tuplas.
Você pode substituir isfunction por qualquer uma das outras funções isXXX no módulo de inspeção.
fonte
getmembers
pode usar um predicado, para que seu exemplo também possa ser escrito:functions_list = [o for o in getmembers(my_module, isfunction)]
functions_list = getmembers(my_module, predicate)
porque ele já retorna uma lista;)fonte
Por uma questão de integridade, gostaria de salientar que às vezes você pode querer analisar o código em vez de importá-lo. Um
import
irá executar expressões de nível superior, e que poderia ser um problema.Por exemplo, estou permitindo que os usuários selecionem funções de ponto de entrada para pacotes feitos com zipapp . O uso
import
e oinspect
risco de executar códigos extraviados, levando a falhas, ajudam a imprimir as mensagens, as caixas de diálogo da GUI são exibidas e assim por diante.Em vez disso, uso o módulo ast para listar todas as funções de nível superior:
Colocando esse código
list.py
e usando-se como entrada, recebo:É claro que navegar em um AST pode ser complicado às vezes, mesmo para uma linguagem relativamente simples como Python, porque o AST é de nível bastante baixo. Mas se você tiver um caso de uso simples e claro, é factível e seguro.
Porém, uma desvantagem é que você não pode detectar funções geradas em tempo de execução, como
foo = lambda x,y: x*y
.fonte
__version__
etc). Existe uma maneira de conseguir isso?Para o código que você não deseja analisar, recomendo a abordagem baseada em AST do @csl acima.
Para todo o resto, o módulo de inspeção está correto:
Isso fornece uma lista de duas tuplas no formulário
[(<name:str>, <value:function>), ...]
.A resposta simples acima é sugerida em várias respostas e comentários, mas não citada explicitamente.
fonte
Isto irá fazer o truque:
No entanto, se você achar irritante ler a lista retornada, use o seguinte loop para obter um nome por linha.
fonte
inspect
. Além disso, como isso é diferente da resposta de @ DanLenski?dir(module)
é a maneira padrão ao usar um script ou intérprete padrão, conforme mencionado na maioria das respostas.No entanto, com um shell python interativo como o IPython, você pode usar o preenchimento de tabulação para obter uma visão geral de todos os objetos definidos no módulo. Isso é muito mais conveniente do que usar um script e
print
ver o que está definido no módulo.module.<tab>
mostrará todos os objetos definidos no módulo (funções, classes e assim por diante)module.ClassX.<tab>
mostrará os métodos e atributos de uma classemodule.function_xy?
oumodule.ClassX.method_xy?
mostrará a documentação dessa função / métodomodule.function_x??
oumodule.SomeClass.method_xy??
mostrará o código fonte da função / método.fonte
Para funções globais
dir()
é o comando a ser usado (como mencionado na maioria dessas respostas), no entanto, ele lista funções públicas e funções não públicas juntas.Por exemplo, executando:
Retorna funções / classes como:
Alguns dos quais não são geralmente destinados para uso programação geral (mas pelo próprio módulo, exceto no caso de DunderAliases como
__doc__
,__file__
ect). Por esse motivo, pode não ser útil listá-los com os públicos (é assim que o Python sabe o que obter ao usarfrom module import *
).__all__
pode ser usado para resolver esse problema, ele retorna uma lista de todas as funções e classes públicas em um módulo (aquelas que não começam com sublinhados -_
). Consulte Alguém pode explicar __all__ em Python? para o uso de__all__
.Aqui está um exemplo:
Todas as funções e classes com sublinhados foram removidas, deixando apenas aquelas definidas como públicas e, portanto, podem ser usadas via
import *
.Observe que
__all__
nem sempre é definido. Se não estiver incluído, umAttributeError
é gerado.Um caso disso é com o módulo ast:
fonte
Nenhuma dessas respostas funcionará se você não conseguir importar o referido arquivo Python sem erros de importação. Esse foi o meu caso quando eu estava inspecionando um arquivo que vem de uma grande base de código com muitas dependências. A seguir, o arquivo será processado como texto e procurará todos os nomes de métodos que começam com "def" e os imprimirá e seus números de linha.
fonte
ast
módulo. Veja minha resposta para um exemplo.Exceto dir (módulo) ou ajuda (módulo) mencionados nas respostas anteriores, você também pode tentar:
- Abrir ipython
- importar module_name
- digite module_name, pressione tab. Ele abrirá uma pequena janela com uma lista de todas as funções no módulo python.
Parece muito arrumado.
Aqui está um trecho de lista de todas as funções do módulo hashlib
fonte
Isso acrescentará todas as funções definidas em seu_módulo em uma lista.
fonte
unit8_conversion_methods
? Este é apenas um exemplo do nome do módulo?[getattr(your_module, func) for func in dir(your_module) if type(getattr(your_module, func)).__name__ == "function"]
Você pode usar o seguinte método para obter uma lista de todas as funções do seu módulo a partir do shell:
import module
fonte
fonte
Resultado :
fonte