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.

Before you keep reading...

Runestone Academy can only continue if we get support from individuals like you. As a student you are well aware of the high cost of textbooks. Our mission is to provide great books to you for free, but we ask that you consider a $10 donation, more if you can or less if $10 is a burden.

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”.

You have attempted 1 of 3 activities on this page