20.3. Call a Parent Method¶
If you compare the code in the __init__ methods of Point
and LabeledPoint
, you can
see that there is some duplication–the initialization of x and y. We can
eliminate the duplication by having LabeledPoint
’s __init__()
method call (execute)
Point
’s __init__()
method. That way, each class will be responsible for
initializing its own instance variables.
All objects keep a reference to the class that created them and every class has a reference to its parent class.
You can get an object that represents the parent class using super()
and then call a method on that object.
1 class LabeledPoint(Point):
2
3 def __init__(self, initX, initY, label):
4 super().__init__(initX, initY)
5 self.label = label
In this example, line 4 invokes the __init__()
method in Point
,
passing the values of initX
and initY
to be used in initializing the x
and y
instance variables.
Here is a complete code listing showing both classes, with a version
of __str__()
for LabeledPoint
that invokes its parent’s implementation
using super()
to avoid duplicating the functionality provided in Point
.
Finish the code for the Student
class below. In the __init__
method for Student
call the __init__
method for Person
and pass in a first and last name. Then also set the id. In the __str__
method for Student
return the id in the form (id: actual_id,) followed by the string returned from the __str__
method in Person
. For example, if s = Student("Abby", "Lane", 1)
then print(s)
should print “id: 1, name: Abby Lane”.