Estoy tratando de usar el módulo inspect
, sin embargo, parece que no puedo usarlo en una clase incorporada (¿nativa?) O de lo contrario no entendí bien.¿Cómo obtener la lista de argumentos de un constructor de clase Python incorporado?
Estoy usando Python 2.7 y lo intenté con Python 3.2.
esto está funcionando:
>>> import inspect
>>> class C:
... def __init__(self,a,b=4):
... self.sum = a + b
...
>>> inspect.getargspec(C.__init__)
ArgSpec(args=['self','a', 'b'], varargs=None, keywords=None, defaults=(4,))
Esto no está funcionando:
>>> import inspect
>>> import ast
>>> inspect.getargspec(ast.If.__init__)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/inspect.py", line 813, in getargspec
raise TypeError('{!r} is not a Python function'.format(func))
TypeError: <slot wrapper '__init__' of '_ast.AST' objects> is not a Python function
Me pregunto si hay otra técnica para obtener estos parámetros de forma automática?
(En mi caso, pienso en una alternativa que sería analizar la gramática de Python, el archivo ASDL que explica cómo iniciar nodos AST utilizando algún código que vi en la fuente de PyPy Project, pero me pregunto si es otra forma)