Simmilar问题(与Python2相关:Python:检查方法是否为静态)
让我们考虑以下类定义:
class A: def f(self): return 'this is f' @staticmethod def g(): return 'this is g'
在Python 3中instancemethod,一切都不再是功能了,因此与Python 2相关的答案将不再起作用。
instancemethod
正如我所说的,一切都是函数,因此我们可以调用A.f(0),但是我们当然不能调用A.f()(参数不匹配)。但是,如果我们做一个实例a=A(),我们叫a.f()Python的传递给函数A.f的self作为第一个参数。调用a.g()阻止发送或捕获self-,因此必须有一种方法来测试它是否为静态方法。
A.f(0)
A.f()
a=A()
a.f()
A.f
self
a.g()
那么我们可以在Python3中检查方法是否被声明为static吗?
static
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'>