[EMAIL PROTECTED] a écrit : > Hiya > > Could you just talk me through this... is it: > > >>schema = {'turbine1': {'class': 'Turbine', >> 'upstream' : ('frobnicator2',), >> 'downstream' : () # nothing, >> }, >> 'frobnicator2' : {'class' : 'Frobnicator', >> 'upstream' : (), >> 'downstream' : ('frobnicator2',), >> }, >> } >> > > > ok, so schema is a dictionary of different components, defining what > class they are and what they're connected to.
Yeps. Note that it could as well be a list of tuple or anything like this, ie: schema = [ ('turbine1', 'Turbine', ('frobnicator2',), ()), ('frobnicator2', 'Frobnicator', (), ('frobnicator2',), ] I choose a dict for readability. Also, I gave the example using Python code as 'config' format, but any structured enough text format could do, ie JSON, XML, or even ini-like: # schema.ini objects = turbine1, frobnicator2 [turbine1] class=Turbine upstream=frobnicator2 downstream= [frobnicator2] class=Frobnicator upstream= downstream=turbine Now you just read the file with the standard config parser and build your chain from it... (implementation left as an exercice...) >>def get_class_by_name(name): >> return globals()[name] > > > what does this function do exactly? Q&D way to retrieve the class object (Python's classes are themselves objects) known by it's name (as a string). globals() returns the module's namespace as a dict object with 'name':object pairs. This code assume that the name is available in the current module's namespace, but could be improved to handle needed imports etc. >>def chain_from_schema(schema): >> objects = {} # so objects is our list of objects ? >> for name, desc in schema: # can you step through a dictionary like this? Nope, sorry, it's a mistake I do over and over. It's of course:; for name, desc in schema.items(): (note that you can iterate over a dict's keys with 'for k in thedict:' ) >> klass = get_class_by_name(desc['class']) # does this create an object called klass? Nope, it binds the class object (retrieved by get_class_by_name()) to the local name 'klass' ('class' is a reserved name). >> objects[name] = klass() > > sorry for being dim.. Where ? -- http://mail.python.org/mailman/listinfo/python-list