Search code examples
pythonpython-3.xstaticstatic-methodsintrospection

Python3: check if method is static


Simmilar question (related with Python2: Python: check if method is static)

Lets concider following class definition:

class A:
  def f(self):
    return 'this is f'

  @staticmethod
  def g():
    return 'this is g'

In Python 3 there is no instancemethod anymore, everything is function, so the answer related to Python 2 will not work anymore.

As I told, everything is function, so we can call A.f(0), but of course we cannot call A.f() (argument missmatch). But if we make an instance a=A() and we call a.f() Python passes to the function A.f the self as first argument. Calling a.g() prevents from sending it or captures the self - so there have to be a way to test if this is staticmethod or not.

So can we check in Python3 if a method was declared as static or not?


Solution

  • class A:
      def f(self):
        return 'this is f'
    
      @staticmethod
      def g():
        return 'this is g'
    print(type(A.__dict__['g']))
    print(type(A.g))
    
    <class 'staticmethod'>
    <class 'function'>