I'm playing with Python callable. Basically you can define a python class and implement __call__
method to make the instance of this class callable. e.g.,
class AwesomeFunction(object):
def __call__(self, a, b):
return a+b
Module inspect has a function getargspec, which gives you the argument specification of a function. However, it seems I cannot use it on a callable object:
fn = AwesomeFunction()
import inspect
inspect.getargspec(fn)
Unfortunately, I got a TypeError:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.6/inspect.py", line 803, in getargspec
raise TypeError('arg is not a Python function')
TypeError: arg is not a Python function
I think it's quite unfortunate that you can't treat any callable object as function, unless I'm doing something wrong here?
The inspect module helps in checking the objects present in the code that we have written. As Python is an OOP language and all the code that is written is basically an interaction between these objects, hence the inspect module becomes very useful in inspecting certain modules or certain objects.
inspect. stack() returns a list with frame records. In function whoami() : inspect. stack()[1] is the frame record of the function that calls whoami , like foo() and bar() . The fourth element of the frame record ( inspect.
If you need this functionality, it is absolutely trivial to write a wrapper function that will check to see if fn
has an attribute __call__
and if it does, pass its __call__
function to getargspec.
If you look at the definition of getargspec
in the inspect module code on svn.python.org. You will see that it calls isfunction
which itself calls:
isinstance(object, types.FunctionType)
Since, your AwesomeFunction
clearly is not an instance of types.FunctionType
it fails.
If you want it to work you should try the following:
inspect.getargspec(fn.__call__)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With