En Wed, 03 Oct 2007 07:12:17 -0300, Lawrence D'Oliveiro <[EMAIL PROTECTED]> escribi�:
> In message <[EMAIL PROTECTED]>, Robert > Kern wrote: > >> Lawrence D'Oliveiro wrote: >> >>> In message <[EMAIL PROTECTED]>, >>> Robert >>> Kern wrote: >>> >>>> Not all of the modules in a package are imported by importing the >>>> top-level package. >>> >>> You can't import packages, only modules. >>> >>>> os.path is a particularly weird case because it is just an alias to >>>> the >>>> platform-specific path-handling module; os is not a package. >>> >>> os is a module, os.path is a variable within that module. That's all >>> there is to it. >> >> Yes, but os.path is also module. That's why I said it was a weird case. > > You can't have modules within modules. os.path isn't an exception--see > below. > >> In [1]: import os >> >> In [2]: type(os.path) >> Out[2]: <type 'module'> > > On my Gentoo system: > > >>> import os > >>> os.path > <module 'posixpath' from '/usr/lib64/python2.5/posixpath.pyc'> > > It's just a variable that happens to point to the posixpath module. A "module" is a certain type of Python objects, like ints, functions, exceptions and all else. The easiest way to create a module is to load it from file, but some modules are already built into the interpreter, and you can even create a module from scratch. py> import os py> type(os) <type 'module'> py> type(os.path) <type 'module'> py> os <module 'os' from 'c:\apps\python25\lib\os.pyc'> py> import sys py> type(sys) <type 'module'> py> sys <module 'sys' (built-in)> py> ModuleType = type(os) py> newmodule = ModuleType('newmodule') py> newmodule.a = 3 py> newmodule <module 'newmodule' (built-in)> py> type(newmodule) is type(os.path) True "os" is a name that refers to the os module object. "os.path" means "the path attribute in the object referenced by the name os", that happens to be another module too. os is not a package; os.path is set when the os module is imported, depending on the platform. It may be ntpath, posixpath, macpath, or whatever. On Windows: py> import ntpath py> os.path is ntpath True py> import macpath py> import posixpath py> macpath.sep ':' py> ntpath.sep '\\' Apart from that, there is no magic involved, just plain attribute access like everywhere else. -- Gabriel Genellina -- http://mail.python.org/mailman/listinfo/python-list