On Tue, 09 Apr 2013 07:50:11 +0200, Morten Guldager wrote: > 'Aloha Friends! > > I'm about to write an API against a huge propitiatory Oracle based > network inventory database. The database have many different concepts > stored in it's tables, can one concept can span over multiple tables. > > I would like to write a class for accessing each concept, but only have > a single database connection throughout the whole program.
Sounds reasonable. > I imagine some code along these lines, but cant figure out how to > declare the classes that will make it work: > > # create a connection to the database and perform come basic login and > initialization > nib = NwInvDb("scott/tiger@ora") > # find a device by ip > interesting_device = nib.Device.lookup_by_ip("192.168.1.1") What's "nib" mean? And "NwInvDb"? I can imagine that the "Db" at the end stands for Database, but the rest is just word-salad. I can guess that NwInvDb is some sort of database connection. Am I close? > In this example I access the concept Device. > > Should I make the Device class inherit from NwInvDb? Or should I keep > them separate? Why are you asking us? We don't know what functionality you expect NwInvDb and Device to have, what they represent, or whether a Device can be meaningfully considered an instance of a NwInvDb, whatever that is. But given my *guess* that NwInvDb represents a database connection, and that Device represents data fetched from that database, then no of course you should not inherit. Inheritance implies an "is-a" relationship. If you inherit from NwInvDb for Device, that implies: - interesting_device Is-A database; - anywhere you can use a NwInvDb database object, you can use a Device object. And the same would apply to every other concept in the database. That does not sound like a clean and useful design to me. -- Steven -- http://mail.python.org/mailman/listinfo/python-list