Importing Modules

Gabriel Genellina gagsl-py2 at yahoo.com.ar
Thu Mar 11 02:37:08 CET 2010


En Wed, 10 Mar 2010 09:19:29 -0300, PEYMAN ASKARI <paskari007 at yahoo.ca>
escribió:

> I wanted to know if imported classes are treated differently than  
> internal classes.

If by 'internal classes' you mean 'classes defined in the main module',
no, they're absolutely the same.

> class A():
>  __init__(self):
>   pass
>
> and call A, or A() I get something to the effect of  <__main__.A  
> instance at 0xb7f088ac>
>
> but if I call from module_name import A and then call A or A() I get  
> something to the effect of  <module_4.module_4 instance at 0xb7f0882c>

Note that both reprs have the same structure. Both say
<modulename.classname instance at ...>
When you execute `python test_import.py`, the code is executed into a
newly created module called __main__ (not test_import). So __main__ is the
name of the main module, and __main__.A is the full name of the A class
defined in the __main__ module.
In the other case, module_4.module_4 is the full name of the module_4
class defined in the module_4 module.

> I was wondering if this would be a problem.

In general, no, you shouldn't care. There is a problem, though, if some
other module imports the main one (using `import test_import`). Python
knows the main one as "__main__", not as "test_import", so it will load it
*again*, and you'll end with two separate copies of the same module.
Solution: don't do that :) -- redesign your application so subordinate
modules don't have to import the main one (move the required parts into a
third module).

-- 
Gabriel Genellina




More information about the Python-list mailing list