Eye of Hell Eye of Hell - 3 months ago 9
Python Question

Getting object's parent namespace in python?

In python it's possible to use '.' in order to access object's dictionary items. For example:

class test( object ) :
def __init__( self ) :
self.b = 1
def foo( self ) :
pass
obj = test()
a = obj.foo


From above example, having 'a' object, is it possible to get from it reference to 'obj' that is a parent namespace for 'foo' method assigned? For example, to change obj.b into 2?

Answer

Python 2.6+ (including Python 3)

You can use the __self__ property of a bound method to access the instance that the method is bound to.

>> a.__self__
<__main__.test object at 0x782d0>
>> a.__self__.b = 2
>> obj.b
2

Python 2.2+ (Python 2.x only)

You can also use the im_self property, but this is not forward compatible with Python 3.

>> a.im_self
<__main__.test object at 0x782d0>