Как найти экземпляр связанного метода в Python? - PullRequest
32 голосов
/ 13 января 2011
>>> class A(object):  
...         def some(self):  
...                 pass  
...  
>>> a=A()  
>>> a.some  
<bound method A.some of <__main__.A object at 0x7f0d6fb9c090>>

IOW, мне нужно получить доступ к "a" после передачи только "a.some".

Ответы [ 4 ]

39 голосов
/ 13 января 2011

Начиная с Python 2.6 вы можете использовать специальный атрибут __self__:

>>> a.some.__self__ is a
True

im_self постепенно сокращается в py3k.

Подробнее см. Модуль inspect в стандартной библиотеке Python.

7 голосов
/ 13 января 2011
>>> class A(object):
...   def some(self):
...     pass
...
>>> a = A()
>>> a
<__main__.A object at 0x7fa9b965f410>
>>> a.some
<bound method A.some of <__main__.A object at 0x7fa9b965f410>>
>>> dir(a.some)
['__call__', '__class__', '__cmp__', '__delattr__', '__doc__', '__format__', '__func__', '__get__', '__getattribute__', '__hash__', '__init__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__self__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'im_class', 'im_func', 'im_self']
>>> a.some.im_self
<__main__.A object at 0x7fa9b965f410>
3 голосов
/ 13 января 2011

Вы хотите что-то вроде этого, я думаю:

>>> a = A()
>>> m = a.some
>>> another_obj = m.im_self
>>> another_obj
<__main__.A object at 0x0000000002818320>

im_self это объект экземпляра класса.

3 голосов
/ 13 января 2011

Попробуйте следующий код и посмотрите, поможет ли он вам:

a.some.im_self
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...