[Tutor] Class Inheritance -> NameError

Christopher Arndt chris.arndt at web.de
Thu Dec 1 04:09:55 CET 2005

Tim Johnson schrieb:
> The following code snippet is meant to test inheritance:
> class test:
>     def __init__(self,v):
>         self.__val = v
>     def val(self):
>         print self.__val
> class sub(test):
>     def __init__(self):
>         val()
> The following console session has an error:

Beware test.__val is a 'private' attribute. See
for an explanation.

>>>>T = mylib.test('hello')
>>>>s = mylib.sub()
> Traceback (most recent call last):
>   File "<stdin>", line 1, in ?
>   File "mylib.py", line 1612, in __init__
>     val()
> NameError: global name 'val' is not defined
> ## what do I need to do to make the 'test method visible
> ## class 'sub?

Surely you mean the 'val' method (see the traceback)?

it lives in the namespace of the class 'test'. So if you want to call it as a
class method:

>>> test.val(instance)

if you want to call it as an instance method:

>>> instance = sub()
>>> instance.val()

resp. in the class and sub-classes itself:

>>> self.val()

HTH, Chris

More information about the Tutor mailing list