On Thu, 21 Jan 2010 06:23:17 -0800, Gnarlodious wrote: >> The right way to solve this problem is with a dictionary: >> >> for name in ["object1", "object2", "object3"]: >> d = {name: classname()} >> print d[name] > > This works! However I end up saying: > > d['Server'].Config.BaseURL > > to get the data, when I should be saying: > > Server.Config.BaseURL
There are three moments in time that the programmer needs to care about: when you write the code, when you compile the code, and when you run the code. In this case, the two relevant ones are write-time and run-time. If you expect to be able to write Server.Config.BaseURL then that means that you MUST know the name "Server" at write-time. (Otherwise, how do you know to write "Server", instead of "MyServer" or "ServerSix"?) That means that the *name* Server isn't specified at runtime, but at write-time. Since you already know the name, then the right solution is to do something like: Server = classname() and then refer to Server, just like you would do: x = 45 print x+1 or similar. But if you are getting the name "Server" from a config file at runtime, say something like this: name=Server class=classname flag=True then you can't write: Server.Config.BaseURL in your source code, because you don't know if it will be called "Server", or "MyServer" or "Server42", or "WebServe", or "Fred". In general, you don't even know how many servers there will be: there could be one, or none, or fifty. So you need a level of indirection, hence the dictionary. -- Steven -- http://mail.python.org/mailman/listinfo/python-list