How to call module functions inside class instance functions?

beginner zyzhu2000 at gmail.com
Sat Aug 18 21:40:22 EDT 2007


On Aug 18, 8:18 pm, Steve Holden <st... at holdenweb.com> wrote:
> beginner wrote:
> > Hi Everyone,
>
> > I have encountered a small problems.  How to call module functions
> > inside class instance functions? For example,  calling func1 in func2
> > resulted in a compiling error.
>
> > "my module here"
>
> > def func1():
> >      print "hello"
>
> > class MyClass:
> >    def func2():
> >          #how can I call func1 here.
> >          func1() #results in an error
>
> If you had bothered to include the error message it would have been
> obvious that the problem with your code isn't in body of the method at
> all - you have failed to include an argument to the method to pick up
> the instance on which the method is called. I am guessing that when you
> create an instance and call its func2 method you see the message
>
> Traceback (most recent call last):
>    File "test07.py", line 12, in <module>
>      myInstance.func2()
> TypeError: func2() takes no arguments (1 given)
>
> which would have been a very useful clue. Please include the traceback
> in future! Here's a version of your program that works.
>
> sholden at bigboy ~/Projects/Python
> $ cat test07.py
> "my module here"
>
> def func1():
>       print "hello"
>
> class MyClass:
>     def func2(self):
>           #how can I call func1 here.
>           func1() #results in an error
>
> myInstance = MyClass()
> myInstance.func2()
>
> sholden at bigboy ~/Projects/Python
> $ python test07.py
> hello
>
> regards
>   Steve
> --
> Steve Holden        +1 571 484 6266   +1 800 494 3119
> Holden Web LLC/Ltd          http://www.holdenweb.com
> Skype: holdenweb      http://del.icio.us/steve.holden
> --------------- Asciimercial ------------------
> Get on the web: Blog, lens and tag the Internet
> Many services currently offer free registration
> ----------- Thank You for Reading -------------- Hide quoted text -
>
> - Show quoted text -

I apologize for not posting the exact code and error message. The
missing "self" is due to a typo of mine. It is not really the problem
I am encountering.

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.

Thanks,
Geoffrey




More information about the Python-list mailing list