Jan Eden wrote: > Not exactly. My current setup bundles all data attributes in a single > module Data containing a single class for each object. So in my main > module (Show), I define:> > class Page(Data.Page): > ... > > and Data contains: > > class Base: > children = 'xyz' > children_query = 'SELECT...' > > class Page: > children = 'something' > own_type = 'somethingelse' > populate_query = "SELECT ..." > index_link = "<p>..." > ... > > So I can use self.children_query for an object of class Show.Page to > get the data attribute defined in class Data.Base. > > But since there are many data attributes, I'd like to use things like: > > self.templates['index_link'] > self.templates['child_link'] > self.queries['populate'] > > or > > self.Templates.index_link > self.Templates.child_link > self.Queries.populate
OK I'll try again. I still don't understand why you don't like using straight class attributes - is it to keep the size of the class namespace smaller? I'm also not sure if you want to be able to access Base.children and Page.children from a subclass of Page. If not, then you can use a hierarchical dictionary to do what you want. How about this? import UserDict class ChainDict(UserDict.DictMixin): ''' A dict that will delegate failed lookups to a parent ''' def __init__(self, parent=None): self._dict = dict() self._parent = parent # __setitem__() and __delitem__() delegate to self._dict self.__setitem__ = self._dict.__setitem__ self.__delitem__ = self._dict.__delitem__ def __getitem__(self, key): try: return self._dict[key] except KeyError: if self._parent is not None: return self._parent[key] def keys(self): keys = self._dict.keys() if self._parent is not None: keys.extend(self._parent.keys()) class Base: templates = dict() templates['children'] = 'xyz' templates['children_query'] = 'SELECT * from Base' class Page(Base): templates = ChainDict(Base.templates) templates['children'] = 'something' templates['own_type'] = 'somethingelse' templates['populate_query'] = "SELECT * from Page" templates['index_link'] = "<p>..." b = Base() print b.templates['children'] print b.templates['children_query'] print p = Page() print p.templates['children'] print p.templates['children_query'] print p.templates['index_link'] Kent PS Please reply on list. -- http://www.kentsjohnson.com _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor