[Tutor] super() and inherited attributes?
Brian van den Broek
bvande at po-box.mcgill.ca
Tue Jun 28 07:44:29 CEST 2005
Marcus Goldfish said unto the world upon 28/06/2005 00:58:
> Hi,
>
> The following example doesn't work as I would like-- the child
> instance doesn't expose the attribute set in the parent. Can someone
> point out what I am missing?
>
> Thanks,
> Marcus
>
>
> class Parent(object):
> def __init__(self, name="I am a parent"):
> self.name = name
>
> class Child(Parent):
> def __init__(self, number):
> super(Parent, self).__init__("I am a child")
> self.number = number
>
> # I would like it to produce the following:
>
>>>c = Child(23)
>>>c.number
>
> 23
>
>>>c.name
>
> "I am a child"
>
> # but I 'AttributeError: 'Child' object has no attribute 'name''
Hi Marcus,
Try it this way:
>>> class Parent(object):
def __init__(self, name="I am a parent"):
self.name = name
>>> class Child(Parent):
def __init__(self, number):
# Note change here in super()
super(Child, self).__init__("Finally, I'm a child!")
self.number = number
>>> c = Child(42)
>>> c.number
42
>>> c.name
"Finally, I'm a child!"
Take a look at these classes, and perhaps they will help clear up any
residual puzzlement.
>>> class A(object):
def do_it(self):
print "From A"
>>> class B(A):
def do_it(self):
print "From B"
>>> class C(B):
def do_it(self):
# look for do_it in B's superclass (i.e. A)
super(B, self).do_it()
# look for do_it in C's superclass (i.e. B)
super(C, self).do_it()
>>> c = C()
>>> c.do_it()
From A
From B
>>>
HTH,
Brian vdB
More information about the Tutor
mailing list