La respuesta previamente aceptada ha quedado en desuso a partir de Python 3.0. En lugar de usar inspect.getargspec, ahora debe optar por la Signatureclase que la reemplazó.
Crear una firma para la función es fácil a través de la signaturefunción :
from inspect import signature
def someMethod(self, arg1, kwarg1=None):
pass
sig = signature(someMethod)
Ahora, puede ver sus parámetros rápidamente al strhacerlo:
str(sig) # returns: '(self, arg1, kwarg1=None)'
o también puede obtener una asignación de nombres de atributos a objetos de parámetros mediante sig.parameters.
params = sig.parameters
print(params['kwarg1']) # prints: kwarg1=20
Además, puede llamar lena sig.parametersver también el número de argumentos Esta función requiere:
print(len(params)) # 3
Cada entrada en el paramsmapeo es en realidad un Parameterobjeto que tiene atributos adicionales que te hacen la vida más fácil. Por ejemplo, tomar un parámetro y ver su valor predeterminado ahora se realiza fácilmente con:
kwarg1 = params['kwarg1']
kwarg1.default # returns: None
de manera similar para el resto de los objetos contenidos en parameters.
En cuanto a los 2.xusuarios de Python , aunque inspect.getargspec no está en desuso, el idioma pronto será :-). La Signatureclase no está disponible en la 2.xserie y no lo estará. Así que aún necesitas trabajar con ellos inspect.getargspec.
En cuanto a la transición entre Python 2 y 3, si tiene código que se basa en la interfaz de getargspecPython 2 y el cambio a signatureen 3que es demasiado difícil, usted tiene la opción valiosa de utilizar inspect.getfullargspec. Ofrece una interfaz similar a getargspec(un único argumento invocable) para obtener los argumentos de una función y al mismo tiempo manejar algunos casos adicionales que getargspecno:
from inspect import getfullargspec
def someMethod(self, arg1, kwarg1=None):
pass
args = getfullargspec(someMethod)
Al igual que con getargspec, getfullargspecdevuelve un NamedTupleque contiene los argumentos.
print(args)
FullArgSpec(args=['self', 'arg1', 'kwarg1'], varargs=None, varkw=None, defaults=(None,), kwonlyargs=[], kwonlydefaults=None, annotations={})
inspectmódulo de biblioteca estándar.