[Python-Dev] Add __exports__ to modules

Guido van Rossum guido@python.org
Fri, 05 Jan 2001 15:14:41 -0500


Please have a look at this SF patch:

http://sourceforge.net/patch/?func=detailpatch&patch_id=102808&group_id=5470

This implements control over which names defined in a module are
externally visible: if there's a variable __exports__ in the module,
it is a list of identifiers, and any access from outside the module to
names not in the list is disallowed.  This affects access using the
getattr and setattr protocols (which raise AttributeError for
disallowed names), as well as "from M import v" (which raises
ImportError).

I like it.  This has been asked for many times.  Does anybody see a
reason why this should *not* be added?

Tim remarked that introducing this will prompt demands for a similar
feature on classes and instances, where it will be hard to implement
without causing a bit of a slowdown.  It causes a slight slowdown (an
extra dictionary lookup for each use of "M.v") even when it is not
used, but for accessing module variables that's acceptable.  I'm not
so sure about instance variable references.

--Guido van Rossum (home page: http://www.python.org/~guido/)