Search code examples
pythonpython-datamodel

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?


Solution

  • 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>