Dale Amon wrote:
The point I take away from this is that packages and
modules have dotted names, but Classes do not and there
is no way to do exactly what I wanted to do.
The dot syntax would have been quite nice (I quite like the
"::" syntax in Perl) and would have made the code much
clearer. The way you suggested with a 'typename_classname'
generated using a from/import statement will just have to
suffice.


You clearly still don't understand. The dot syntax works very predictably, and quite flexibly. The problem was that by using the same name for module and class, you didn't realize you needed to include both.

If a particular module is called mymodule, and you want to use a class within it called myclass, you can do it readily with:

import mymodule
obj = mymodule.myclass(arg1, arg2)

If you have the same class name in more than one module, you can make either one simply by doing:

obj =  mymodule1.myclass(arg1, arg2)
obj = .mymlodule2.myclass(arg1, arg2)

And in particular if you simply do the following, you can choose between those modules:

if  test:
   mod = mymodule1
else:
  mod = mymodule2
obj = mod.myclass(arg1, arg2)

Now the same logic would work if you added packages to the mix, and if you happened to call the class the same thing as the module. But it would be very confusing in a message like this, so I choose not to.

The compiler doesn't care if the names are the same, but when you get scoping wrong, the error messages will be confusing.

Please don't sink to exec or eval to solve what is really a straightforward problem.


--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to