Учитывая ссылку на метод, существует ли способ проверить, связан ли метод с объектом или нет? Можете ли вы также получить доступ к экземпляру, к которому он привязан?
Как вы проверяете, связан ли метод python или нет?
Ответ 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__')
Ответ 3
im_self атрибут (только Python 2)