Как получить экземпляр с помощью метода экземпляра?
class MyClass:
def myMethod(self):
pass
myInstance = MyClass()
methodReference = myInstance.myMethod
Теперь вы можете получить ссылку на myInstance
, если у вас есть только доступ к methodReference
?
Ответы
Ответ 1
methodReference.im_self
и аналогичным токеном для класса:
methodReference.im_class
Для такого рода обнаружения кода вы должны установить iPython и использовать вкладку, например, в вашем случае myReference. + TAB даст:
In [6]: methodReference. methodReference.im_class
methodReference.im_func methodReference.im_self
Следовательно, вам не нужно беспокоиться о том, чтобы запомнить все так много - вы знаете, что метод, вероятно, предоставляется объектом функции, и из предложений, которые iPython дает, обычно очевидно, какой метод/атрибут вы ищете.
Ответ 2
Попробуйте следующее:
methodReference.im_self
Если вы используете Python 3:
methodReference.__self__
Ответ 3
Вы можете это сделать самостоятельно - посмотрите на вывод dir
:
>>> dir(mr)
['__call__', ... '__str__', '__subclasshook__', 'im_class', 'im_func', 'im_self']
Примеры im_*
относятся к атрибутам, определенным для instance methods
...
Класс, в котором он был определен, блок кода функции и объект, к которому он привязан...