检查 class 中的方法是否是静态的而不实例化

Check if method is static from class without instantiating

如何检查给定 class 的方法是否为静态方法,而不是 class 的实例。在某些用例中,class 的实例化可能会产生一些后果,您可能需要在任何实例化之前知道方法是否是静态的。以 class:

为例
class MyClass:

  def method(self):
    pass

  @staticmethod
  def static_method():
    pass

我需要一个函数 is_staticmethod 给出:

>>> is_staticmethod(MyClass, 'method')
False
>>> is_staticmethod(MyClass, 'static_method')
True

并且如前所述,此函数不应实例化 class。我试图搜索一个已经回答了这个问题的问题,但得到了很多与 class 实例相关的结果,这不是我需要的。

注意:这不是 Python: check if method is static

的副本

首先从 class 的命名空间中获取它,然后使用 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