hiding modules in __init__.py

Gabriel Genellina gagsl-py2 at yahoo.com.ar
Tue Oct 21 07:16:01 CEST 2008

En Sat, 18 Oct 2008 16:03:19 -0300, Brendan Miller <catphive at catphive.net>  

> How would I implement something equivalent to java's package private in
> python?
> Say if I have
> package/__init__.py
> package/utility_module.py
> and utility_module.py is an implementation detail subject to change.
> Is there some way to use __init__.py to hide modules that I don't want
> clients to see? Or is the best practice just to name the module you don't
> want clients to use _utility_module and have it private by convention?

If you don't import utility_module in __init__ (or delete the name after  
using it), it won't show up if someone does "from package import *", nor  
in dir(package). Plus if you don't menction it in the docs, the only way  
to discover it would be to look at the directory contents - to "peek the  
implementation", I'd say.
You could always name it _utility_module.py if you want to make perfectly  
clear that it's for internal use only, but I've seldom seen such module  

Gabriel Genellina

More information about the Python-list mailing list