How to call module functions inside class instance functions?
Alex Martelli
aleax at mac.com
Sun Aug 19 01:48:32 EDT 2007
beginner <zyzhu2000 at gmail.com> wrote:
...
> testmodule.py
> -----------------
> """Test Module"""
>
> def __module_level_func():
> print "Hello"
>
> class TestClass:
> def class_level_func(self):
> __module_level_func()
>
>
> main.py
> ------------------
> import testmodule
>
> x=testmodule.TestClass()
> x.class_level_func()
>
>
> The error message I am encountering is: NameError: global name
> '_TestClass__module_level_func' is not defined
>
> I think it has something to do with the two underscores for
> __module_level_func. Maybe it has something to do with the python
> implementation of the private class level functions.
>
> By the way, the reason I am naming it __module_level_func() is because
> I'd like __module_level_func() to be private to the module, like the C
> static function. If the interpreter cannot really enforce it, at least
> it is some sort of naming convention for me.
The two underscores are exactly the cause of your problem: as you see in
the error message, the compiled has inserted the CLASS name (not MODULE
name) implicitly there. This "name mangling" is part of Python's rules.
Use a SINGLE leading underscore (NOT double ones) as the "sort of naming
convention" to indicate privacy, and Python will support you (mostly by
social convention, but a little bit technically, too); use a different
convention (particularly one that fights against the language rules;-)
and you're "fighting city hall" to no good purpose and without much hope
of achieving anything whatsoever thereby.
Alex
More information about the Python-list
mailing list