Подтвердить что ты не робот

Как вы проверяете, связан ли метод python или нет?

Учитывая ссылку на метод, существует ли способ проверить, связан ли метод с объектом или нет? Можете ли вы также получить доступ к экземпляру, к которому он привязан?

4b9b3361

Ответ 1

def isbound(method):
    return method.im_self is not None

def instance(bounded_method):
    return bounded_method.im_self

Пользовательские методы:

Когда пользовательский объект метода созданный путем извлечения пользовательского объект функции из класса, его im_self - None, а объект метода считается несвязанным. Когда он создается путем извлечения пользовательский объект функции из класса через один из его экземпляров, его Атрибут im_self - это экземпляр и объект метода считается связанным. В любом случае новый метод Атрибут im_class - это класс из который происходит, и его атрибут im_func является оригиналом функциональный объект.

В Python 2.6 и 3.0:

Объекты метода экземпляра имеют новые атрибуты для объекта и функции включающий способ; новый синоним для im_self составляет __self__, а im_funcтакже доступен как __func__. Старый имена по-прежнему поддерживаются в Python 2.6, но ушли в 3.0.

Ответ 2

В python 3 атрибут __self__ устанавливается только для связанных методов. Он не установлен в None для простых функций (или несвязанных методов, которые являются просто функциями в python 3).

Используйте что-то вроде этого:

def is_bound(m):
    return hasattr(m, '__self__')