В Python 3 нет связанных методов, поэтому вы не можете их обнаружить. Все, что у вас есть, это обычные функции. Самое большее, вы можете увидеть, есть ли у них квалифицированное имя с точкой , указывающее, что они вложены , а их первый аргумент имеет имя self
:
if '.' in method.__qualname__ and inspect.getargspec(method).args[0] == 'self':
# regular method. *Probably*
Это, конечно, не работает полностью для статических методов и вложенных функций, которые имеют self
в качестве первого аргумента, а также для обычных методов, которые не используют self
в качестве первого аргумента (что противоречит соглашению) .
Для статических методов и методов класса вам нужно взглянуть на словарь классов :
>>> isinstance(vars(C)['st'], staticmethod)
True
Это потому, что C.__dict__['st']
является фактическим staticmethod
экземпляром, до привязки к классу .