I want to distinguish between methods and functions in Python 3. Furthermore, I want to get the corresponding class if it is a method. My current solution is like this:
You just need to get the type of the method, but since methods are descriptors, you have to :
1 - Get the class out of the instance.
2 - Look up the method reference in __dict__
instead of making an attribute lookup.
E.G :
>>> f = Foo()
>>> type(f.__class__.__dict__['bari'])
<class 'function'>
>>> type(f.__class__.__dict__['barc'])
<class 'classmethod'>
>>> type(f.__class__.__dict__['bars'])
<class 'staticmethod'>
I think better way to use isfunction()
method of inspect
.
Syntax:
[inspect.getmembers(<module name>, inspect.isfunction)] # will give all the functions in that module
If you want to test single method, you can do so by...
inspect.isfunction(<function name>) # return true if is a function else false
There are many predicates you can use along with is function. Refer to the Python 3 documentation for inspect for a clear picture.