一尘不染

Python:检查方法是否静态

python

假设以下类定义:

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

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

a = A()

因此,f是常规方法,而g是静态方法。

现在,如何检查功能对象af和ag是否静态?Python中是否有“静态”功能?

我必须知道这一点,因为我有包含许多不同功能(方法)对象的列表,要调用它们,我必须知道它们是否期望“ self”作为参数。


阅读 244

收藏
2021-01-20

共1个答案

一尘不染

让我们尝试一下:

>>> import types
>>> class A:
...   def f(self):
...     return 'this is f'
...   @staticmethod
...   def g():
...     return 'this is g'
...
>>> a = A()
>>> a.f
<bound method A.f of <__main__.A instance at 0x800f21320>>
>>> a.g
<function g at 0x800eb28c0>
>>> isinstance(a.g, types.FunctionType)
True
>>> isinstance(a.f, types.FunctionType)
False

因此,看起来您可以types.FunctionType用来区分静态方法。

2021-01-20