La réponse précédemment acceptée a été dépréciée au Python 3.0
. Au lieu d'utiliser, inspect.getargspec
vous devriez maintenant opter pour la Signature
classe qui l'a remplacé.
Créer une signature pour la fonction est facile via la signature
fonction :
from inspect import signature
def someMethod(self, arg1, kwarg1=None):
pass
sig = signature(someMethod)
Désormais, vous pouvez soit afficher rapidement ses paramètres en l' str
utilisant:
str(sig) # returns: '(self, arg1, kwarg1=None)'
ou vous pouvez également obtenir un mappage des noms d'attributs aux objets paramètres via sig.parameters
.
params = sig.parameters
print(params['kwarg1']) # prints: kwarg1=20
De plus, vous pouvez appeler len
le sig.parameters
voir aussi le nombre d'arguments de cette fonction nécessite:
print(len(params)) # 3
Chaque entrée du params
mappage est en fait un Parameter
objet qui a d'autres attributs qui vous facilitent la vie. Par exemple, saisir un paramètre et afficher sa valeur par défaut est désormais facile avec:
kwarg1 = params['kwarg1']
kwarg1.default # returns: None
de même pour le reste des objets contenus dans parameters
.
Quant aux 2.x
utilisateurs de Python , bien que inspect.getargspec
non obsolète, le langage le sera bientôt :-). La Signature
classe n'est pas disponible dans la 2.x
série et ne le sera pas. Vous devez donc toujours travailler avec inspect.getargspec
.
En ce qui concerne la transition entre Python 2 et 3, si vous avez du code qui repose sur l'interface de getargspec
Python 2 et que le passage à signature
dans 3
est trop difficile, vous avez la possibilité d'utiliser inspect.getfullargspec
. Il offre une interface similaire à getargspec
(un seul argument appelable) afin de récupérer les arguments d'une fonction tout en gérant des cas supplémentaires qui getargspec
ne le font pas:
from inspect import getfullargspec
def someMethod(self, arg1, kwarg1=None):
pass
args = getfullargspec(someMethod)
Comme avec getargspec
, getfullargspec
renvoie a NamedTuple
qui contient les arguments.
print(args)
FullArgSpec(args=['self', 'arg1', 'kwarg1'], varargs=None, varkw=None, defaults=(None,), kwonlyargs=[], kwonlydefaults=None, annotations={})
inspect
module de bibliothèque standard.