sharing objects between classes

Diez B. Roggisch deets at nospam.web.de
Mon Jan 28 10:30:29 EST 2008


Gerardo Herzig wrote:

> Hi all. Im wondering the way to share a database connection between some
> classes:
> 
> So far, i came up with a simple class schema, where each class means
> each different relation, i mean i have the follow classes
> 
> class Database(object):
>   ## make the connection
>   self.conn = make_conn(....)
> 
> class Table(object):
>   def get_fields:
>     ....
> 
> And at this point i dont know how to use the Database.conn attribute,
> since the get_fields method will perform a query over the given database.
> At first, i just define the Table class as a inner class of Database,
> but if i try a
> class Database(object):
>   ## make the connection
>   def __init__(self):
>     self.conn = sql_connect(....)
>     self.table = Table('foo')
> 
>   class Table(object): ## inner class
>     def get_fields(self, name):
>     ....
> 
> I get a "NameError: global name 'Table' is not defined".
> 
> So, which would the right pattern to use here? Using a global module? I
> dont know why, but i dont like that idea too much.
> 
> Any comments will be appreciated!
> Thanks!

Take a look at the sources of e.g. SQLObject and how they do it (in SO, the
concept is called "HUB")

Essentially, you set a reference to a global connection object that itself
isn't a simple global but useses threading.local to have one connection per
thread. Then you can access that connection transparently.

Diez



More information about the Python-list mailing list