56
>>> class A(object):  
...         def some(self):  
...                 pass  
...  
>>> a=A()  
>>> a.some  
<bound method A.some of <__main__.A object at 0x7f0d6fb9c090>>

IOW, I need to get access to "a" after being handed over only "a.some".

4 Answers 4

70

Starting python 2.6 you can use special attribute __self__:

>>> a.some.__self__ is a
True

im_self is phased out in py3k.

For details, see the inspect module in the Python Standard Library.

Sign up to request clarification or add additional context in comments.

2 Comments

Just to make it entirely clear: Use this if you have Python 3. If you're using Python 2, the equivalent is the im_self that others have posted.
This does not appear to work for dunder methods, e.g. in the original example, A().__init__.__self__ and A().__eq__.__self__ do not exist. Any idea if there is an alternative?
7
>>> 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>

Comments

3

Try following code and see, if it helps you:

a.some.im_self

Comments

3

You want something like this I guess:

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

im_self is the class instance object.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.