[Tutor] How to use a module when only import package
Steven D'Aprano
steve at pearwood.info
Fri Apr 8 06:16:01 CEST 2011
leechau wrote:
> I wrote module1 in package1, and want to use a method named 'method1' in
> module1, the caller(test.py) is like this:
>
> import package1
> package1.module1.method1()
[...]
> When i run test.py, the output is:
> AttributeError: 'module' object has no attribute 'module1'
> File "e:\MyDoc\GODU_BVT\test.py", line 2, in <module>
> package1.module1.method1()
>
> If test.py is modified to:
> import package1.module1
> ...
> then everything goes well.
Yes, that is correct, and that is a deliberate design.
What if your package had a 1000 sub-modules, each of which were big? You
wouldn't want loading the main package to automatically load all 1000
sub-modules, if you only needed 1.
You either import the sub-module by hand:
import package1.module1
and now you can use package1.module1.method1 (not really a method,
actually a function). If you want module1 to automatically be available
after importing the package, include one of these in the package1
__init__.py file:
import module1 # should work in Python 2
and now package1 will include the module1 in its namespace.
--
Steven
More information about the Tutor
mailing list