La risposta precedentemente accettata è stata deprecata a partire da Python 3.0. Invece di usare inspect.getargspecora dovresti optare per la Signatureclasse che l'ha sostituita.
La creazione di una firma per la funzione è facile tramite la signaturefunzione :
from inspect import signature
def someMethod(self, arg1, kwarg1=None):
pass
sig = signature(someMethod)
Ora puoi visualizzare rapidamente i suoi parametri strinserendolo:
str(sig) # returns: '(self, arg1, kwarg1=None)'
oppure puoi anche ottenere una mappatura dei nomi degli attributi agli oggetti parametro tramite sig.parameters.
params = sig.parameters
print(params['kwarg1']) # prints: kwarg1=20
Inoltre, è possibile chiamare lensu sig.parametersdi vedere anche il numero di argomenti di questa funzione richiede:
print(len(params)) # 3
Ogni voce nella paramsmappatura è in realtà un Parameteroggetto che ha ulteriori attributi che ti semplificano la vita. Ad esempio, afferrare un parametro e visualizzarne il valore predefinito ora è facilmente eseguibile con:
kwarg1 = params['kwarg1']
kwarg1.default # returns: None
allo stesso modo per il resto degli oggetti contenuti in parameters.
Per quanto riguarda gli 2.xutenti di Python , sebbene inspect.getargspec non sia deprecato, la lingua sarà presto :-). La Signatureclasse non è disponibile nella 2.xserie e non lo sarà. Quindi devi ancora lavorare con inspect.getargspec.
Per quanto riguarda la transizione tra Python 2 e 3, se hai codice che si basa sull'interfaccia di getargspecin Python 2 e il passaggio a signaturein 3è troppo difficile, hai la preziosa opzione di usare inspect.getfullargspec. Offre un'interfaccia simile a getargspec(un singolo argomento richiamabile) al fine di afferrare gli argomenti di una funzione gestendo anche alcuni casi aggiuntivi che getargspecnon:
from inspect import getfullargspec
def someMethod(self, arg1, kwarg1=None):
pass
args = getfullargspec(someMethod)
Come con getargspec, getfullargspecrestituisce un NamedTupleche contiene gli argomenti.
print(args)
FullArgSpec(args=['self', 'arg1', 'kwarg1'], varargs=None, varkw=None, defaults=(None,), kwonlyargs=[], kwonlydefaults=None, annotations={})
inspectmodulo libreria standard.