How to distinguish an instance method, a class method, a static method or a function in Python 3?

后端 未结 2 1144
不知归路
不知归路 2021-01-06 16:48

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:

相关标签:
2条回答
  • 2021-01-06 17:07

    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'>
    
    0 讨论(0)
  • 2021-01-06 17:15

    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.

    0 讨论(0)
提交回复
热议问题