SWIG and function name question

Michael Hudson mwh21 at cam.ac.uk
Wed Nov 3 14:21:33 EST 1999


kain at twilight. (Scott Barron) writes:

> Hey folks,
> 
> I downloaded and started to learn SWIG today and I ran into a little problem.
> In the C code there is a structure like this:
> 
> struct __foo { ... };
> 
> When I import my SWIG created module using 'import mymodule' I have access 
> to the struct's set/get operation via mymodule.__foo_set_member() but if I 
> import my module using 'from mymodule import *' I have access to all of my
> modules functions accept the two get/set functions that begin with __
> (I'm using dir() to check this).  This isn't too much of a problem for me
> but I'm just wondering what's going on.  Can anyone clear this up for me?

It's nothing to do with SWIG; try this for size:

put this in a file called foo.py on your PYTHONPATH:

def nowyouseeme():
    return "hi!"
def _nowyoudont():
    return "oi!"

then:

>>> from foo import *
>>> nowyouseeme()
'hi!'
>>> _nowyoudont()
Traceback (innermost last):
  File "<stdin>", line 1, in ?
NameError: _nowyoudont
>>> import foo
>>> foo.nowyouseeme()
'hi!'
>>> foo._nowyoudont()
'oi!'

Y'see, identifiers starting with `_' are considered (to some extent)
module private and are *not* imported when you use the "import *"
style.

There's a simple answer: don't use the "import *" style. Ever.

That's a bit harsh, but the only exceptions I make are for modules
that are written with that in mine, eg. Tkinter.

Also it can be handy in interactive mode, but I still tend to avoid it
there. readline rules!

HTH,
Michael

O, look: http://www.python.org/doc/current/ref/import.html has all the
gory details...




More information about the Python-list mailing list