Wojciech Danilo Wojciech Danilo - 6 months ago 25
Python Question

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?

Answer
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'>