Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Getting container/parent object from within python

In Python, is it possible to get the object, say Foo, that contains another object, Bar, from within Bar itself? Here is an example of what I mean

class Foo(object):     def __init__(self):         self.bar = Bar()         self.text = "Hello World"  class Bar(object):     def __init__(self):         self.newText = foo.text #This is what I want to do,                                  #access the properties of the container object  foo = Foo() 

Is this possible? Thanks!

like image 555
Michael McClenaghan Avatar asked May 28 '12 23:05

Michael McClenaghan


1 Answers

Pass a reference to the Bar object, like so:

class Foo(object):     def __init__(self):         self.text = "Hello World"  # has to be created first, so Bar.__init__ can reference it         self.bar = Bar(self)  class Bar(object):     def __init__(self, parent):         self.parent = parent         self.newText = parent.text  foo = Foo() 

Edit: as pointed out by @thomleo, this can cause problems with garbage collection. The suggested solution is laid out at http://eli.thegreenplace.net/2009/06/12/safely-using-destructors-in-python/ and looks like

import weakref  class Foo(object):     def __init__(self):         self.text = "Hello World"         self.bar = Bar(self)  class Bar(object):     def __init__(self, parent):         self.parent = weakref.ref(parent)    # <= garbage-collector safe!         self.newText = parent.text  foo = Foo() 
like image 168
Hugh Bothwell Avatar answered Sep 22 '22 08:09

Hugh Bothwell