[Tutor] Class Inheritance -> NameError
John Fouhy
john at fouhy.net
Thu Dec 1 05:11:12 CET 2005
On 01/12/05, Tim Johnson <tim at johnsons-web.com> wrote:
> My thanks to Christopher and Liam. I've revisited this
> with the following:
> class test:
> def __init__(self):
> self.s = ' there'
> def val(self,V):
> print '%s%s' % (V,self.s)
> class sub(test):
> def __init__(self):
> pass
> The following console session:
> >>> T = mylib.test()
> >>> S = mylib.sub()
> >>> S.val('hello')
> Traceback (most recent call last):
> File "<stdin>", line 1, in ?
> File "mylib.py", line 1609, in val
> print '%s%s' % (V,self.s)
> AttributeError: sub instance has no attribute 's'
Hi Tim,
When you create an instance of a class, python calls the __init__
method of the class you just created, but it _doesn't_ call the
__init__ method of any superclasses. There are several good reasons
for this --- it doesn't know what parameters you want to pass to the
superclass __init__ methods, or when you want to call them. So, it is
up to you to make that call.
You can do that like this:
class sub(test):
def __init__(self):
test.__init__(self)
Because self.s is only created in test.__init__, you have to call the
__init__ method to get access to it.
HTH!
--
John.
More information about the Tutor
mailing list