Dado um objeto Python de qualquer tipo, existe uma maneira fácil de obter a lista de todos os métodos que esse objeto possui?
Ou,
se isso não for possível, existe pelo menos uma maneira fácil de verificar se ele possui um método específico, além de simplesmente verificar se ocorre um erro quando o método é chamado?
python
introspection
Thomas Lötzer
fonte
fonte
Respostas:
Para muitos objetos , você pode usar esse código, substituindo 'object' pelo objeto em que está interessado:
Eu o descobri no diveintopython.net (agora arquivado). Felizmente, isso deve fornecer mais detalhes!
Se você receber um
AttributeError
, poderá usar isso :getattr(
é intolerante às subclasses virtuais abstratas do estilo pandas python3.6. Este código faz o mesmo que acima e ignora exceções.fonte
print [method for method in dir(object) if callable(getattr(object, method))]
.AttributeError: module 'pandas.core.common' has no attribute 'AbstractMethodError'
quando tento executar isso. Veja detalhes em stackoverflow.com/q/54713287/9677043 .Você pode usar a
dir()
função interna para obter uma lista de todos os atributos que um módulo possui. Tente isso na linha de comando para ver como funciona.Além disso, você pode usar a
hasattr(module_name, "attr_name")
função para descobrir se um módulo possui um atributo específico.Consulte o Guia de introspecção do Python para obter mais informações.
fonte
hasattr
ajudou meu caso de uso a descobrir se o objeto python tem uma variável ou método de membro específico.O método mais simples é usar
dir(objectname)
. Ele exibirá todos os métodos disponíveis para esse objeto. Truque legal.fonte
AttributeError: module 'pandas.core.common' has no attribute 'AbstractMethodError'
. Alguma ideia? Consulte deets em stackoverflow.com/q/54713287/9677043 . +1 para @Pawan Kumar b / c, a resposta funciona e para @ljs, pela promessa de uma lista filtrada apenas dos métodos.Para verificar se ele possui um método específico:
fonte
if hasattr(obj,method) and callable(getattr(obj,method)):
Eu acredito que o que você quer é algo como isto:
Na minha humilde opinião, a função interna
dir()
pode fazer esse trabalho por você. Retirado dahelp(dir)
saída do seu Python Shell:Por exemplo:
Enquanto eu checava seu problema, decidi demonstrar minha linha de pensamento, com uma melhor formatação da saída de
dir()
.dir_attributes.py (Python 2.7.6)
dir_attributes.py (Python 3.4.3)
Espero que eu tenha contribuído :).
fonte
Além das respostas mais diretas, seria negligente se não mencionasse o iPython . Pressione 'tab' para ver os métodos disponíveis, com preenchimento automático.
E depois de encontrar um método, tente:
para ver os pydocs, a assinatura do método etc.
Ahh ... REPL .
fonte
Se você deseja métodos especificamente , deve usar o inspect.ismethod .
Para nomes de métodos:
Para os próprios métodos:
Às vezes, também
inspect.isroutine
pode ser útil (para embutidos, extensões C, Cython sem a diretiva de compilação "binding").fonte
inspect.getmembers
vez de usardir
em uma lista de compreensão?Abra o shell bash (ctrl + alt + T no Ubuntu). Inicie o shell python3 nele. Crie um objeto para observar métodos de. Basta adicionar um ponto depois e pressionar duas vezes "tab" e você verá algo assim:
fonte
ipython
, começar a digitar o objeto e pressionartab
e ele também funcionará. Nenhuma configuração de linha de leitura necessáriaO problema com todos os métodos indicados aqui é que você NÃO pode ter certeza de que não existe um método.
No Python, você pode interceptar a chamada de ponto
__getattr__
e__getattribute__
, possibilitando a criação do método "em tempo de execução"Exemplo:
Se você executá-lo, poderá chamar o método inexistente no dicionário de objetos ...
E é por isso que você usa o Easy para pedir perdão do que os paradigmas de permissão no Python.
fonte
A maneira mais simples de obter a lista de métodos de qualquer objeto é usar o
help()
comandoEle listará todos os métodos disponíveis / importantes associados a esse objeto.
Por exemplo:
fonte
%
faz no primeiro exemplo? Não funciona no meu Python 2.7.Isso deve funcionar :)
fonte
Pode-se criar uma
getAttrs
função que retornará os nomes de propriedades que podem ser chamados de um objetoIsso voltaria
fonte
Não há uma maneira confiável de listar todos os métodos do objeto.
dir(object)
geralmente é útil, mas em alguns casos pode não listar todos os métodos. De acordo com adir()
documentação : "Com um argumento, tente retornar uma lista de atributos válidos para esse objeto."A verificação de que o método existe pode ser feita
callable(getattr(object, method))
como já mencionado lá.fonte
Pegue uma lista como um objeto
list(filter(lambda x:callable(getattr(obj,x)),obj.__dir__()))
Você obtém:
fonte
Embora " Mais fácil pedir perdão do que permissão " seja certamente o caminho pitônico, o que você está procurando talvez:
fonte
Para procurar um método específico em um módulo inteiro
fonte
Se você estiver, por exemplo, usando shell plus, poderá usar isso:
dessa forma, com o '??' logo após o seu objeto, ele mostrará todos os atributos / métodos que a classe possui.
fonte