How to check if a method is static given a class, not an instance of a class. In some use cases, the instantiation of a class might have some consequences, and you might need to know if a method is static before any instantiation. Take for example the class:
class MyClass:
def method(self):
pass
@staticmethod
def static_method():
pass
I need a function is_staticmethod
that gives:
>>> is_staticmethod(MyClass, 'method')
False
>>> is_staticmethod(MyClass, 'static_method')
True
And as said before, this function should not instantiate the class. I tried to search for a question that already answered this, but got many results related to the case of class instances, which is not what I need.
>Solution :
Frist get it from the class’s namespace, then use isinstance
:
def is_staticmethod(cls, m):
return isinstance(cls.__dict__.get(m), staticmethod)
print(is_staticmethod(MyClass, 'method')) # False
print(is_staticmethod(MyClass, 'static_method')) # True