Lament: Import is not very smart.

Lonnie Princehouse fnord at u.washington.edu
Tue Jul 13 18:25:50 EDT 2004


I don't know if this is a bug or a feature, but it sure is annoying. 
I apologize if it's already been discussed to death elsewhere (I
couldn't find anything).

Suppose that you've a package named "foo" which contains module "bar".
 Because you're careless, you've also put foo/ into your path...

Here's the problem:

>> import foo.bar
>> import bar
>> foo.bar == bar
False

The second import doesn't recognize that "bar" is already loaded as
foo.bar, and loads the module again.  I know it's easy to avoid this
by being consistent, but wouldn't be more intuitive if import checked
a hash of loaded module filenames before importing something anew? 
E.g.

>> import foo.bar
>> import bar
>> foo.bar == bar
True

It's probably too late to change, but it's food for thought.

(addendum: I ran into this when isinstance seemingly malfunctioned
while I was patching together lots of modules into a cohesive package;
turns out there were some instances that had been created from
package.module.class and others that were instances of module.class..
it took a while to figure out just what the problem was)



More information about the Python-list mailing list