A resposta aceita anteriormente foi descontinuada a partir de Python 3.0
. Em vez de usar, inspect.getargspec
você deve agora optar pela Signature
classe que a substituiu.
Criar uma assinatura para a função é fácil através da signature
função :
from inspect import signature
def someMethod(self, arg1, kwarg1=None):
pass
sig = signature(someMethod)
Agora, você pode visualizar seus parâmetros rapidamente, usando str
-o:
str(sig) # returns: '(self, arg1, kwarg1=None)'
ou você também pode obter um mapeamento de nomes de atributos para objetos de parâmetro via sig.parameters
.
params = sig.parameters
print(params['kwarg1']) # prints: kwarg1=20
Além disso, você pode chamar len
de sig.parameters
ver também o número de argumentos Esta função exige:
print(len(params)) # 3
Cada entrada no params
mapeamento é na verdade um Parameter
objeto que possui outros atributos, facilitando sua vida. Por exemplo, pegar um parâmetro e visualizar seu valor padrão agora é facilmente realizado com:
kwarg1 = params['kwarg1']
kwarg1.default # returns: None
da mesma forma para o restante dos objetos contidos em parameters
.
Quanto aos 2.x
usuários de Python , embora inspect.getargspec
não seja preterido, a linguagem em breve será :-). A Signature
turma não está disponível na 2.x
série e não estará. Então você ainda precisa trabalhar inspect.getargspec
.
Quanto à transição entre Python 2 e 3, se você tiver o código que se baseia na interface getargspec
em Python 2 e mudar para signature
nos 3
é muito difícil, você tem a opção valiosa de utilizar inspect.getfullargspec
. Ele oferece uma interface semelhante a getargspec
(um único argumento que pode ser chamado) para capturar os argumentos de uma função enquanto também lida com alguns casos adicionais que getargspec
não:
from inspect import getfullargspec
def someMethod(self, arg1, kwarg1=None):
pass
args = getfullargspec(someMethod)
Assim como getargspec
, getfullargspec
retorna a NamedTuple
que contém os argumentos.
print(args)
FullArgSpec(args=['self', 'arg1', 'kwarg1'], varargs=None, varkw=None, defaults=(None,), kwonlyargs=[], kwonlydefaults=None, annotations={})
inspect
módulo de biblioteca padrão.