A resposta aceita anteriormente foi descontinuada a partir de Python 3.0. Em vez de usar, inspect.getargspecvocê deve agora optar pela Signatureclasse que a substituiu.
Criar uma assinatura para a função é fácil através da signaturefunçã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 lende sig.parametersver também o número de argumentos Esta função exige:
print(len(params)) # 3
Cada entrada no paramsmapeamento é na verdade um Parameterobjeto 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.xusuários de Python , embora inspect.getargspec não seja preterido, a linguagem em breve será :-). A Signatureturma não está disponível na 2.xsé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 getargspecem Python 2 e mudar para signaturenos 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 getargspecnão:
from inspect import getfullargspec
def someMethod(self, arg1, kwarg1=None):
pass
args = getfullargspec(someMethod)
Assim como getargspec, getfullargspecretorna a NamedTupleque contém os argumentos.
print(args)
FullArgSpec(args=['self', 'arg1', 'kwarg1'], varargs=None, varkw=None, defaults=(None,), kwonlyargs=[], kwonlydefaults=None, annotations={})
inspectmódulo de biblioteca padrão.