Start learning free

LESSON 401 OF 410 · OBJECT-ORIENTED PROGRAMMING

Calling the Parent with super() in Python in Python

Practice

TL ; DR:

Inside an override, super() gives you the parent class, so super().bark() runs the parent's version of bark on the same object. This lets you extend the parent's behavior instead of replacing it.


class Puppy(Dog):
    def bark(self):
        super().bark()    # do everything the parent did
        print("Yip! Said " + self.name)

Why it matters

Overriding a method replaces the parent's behavior. Often you want to extend it instead: keep what the parent did and add something more. A typical example is a save method: the parent writes the row to the database, and a subclass runs the parent's save first and then writes a log line.

Your task

The Puppy class already overrides bark, but the body is empty. Inside Puppy.bark(self):

  1. call the parent's version with super().bark(), so Woof! I am <name> still prints;
  2. then print("Yip! Said " + self.name).

Notes:

  • Write super().bark() with the parentheses: super() is a call that returns a stand-in for the parent class.
  • self.name is the name stored by Dog.__init__; Puppy has no __init__ of its own, so it inherits the parent's.

The driver (already written, it runs when you press Run):

buddy = Puppy("Buddy")
buddy.bark()

rex = Puppy("Rex")
rex.bark()
dog = Dog("Max")
dog.bark()
  • buddy is a Puppy: its bark prints the parent's line, then its own.
  • rex is another Puppy: the names come from the object, nothing is hard-coded.
  • dog is a plain Dog: its bark is unchanged and prints only the parent's line, with no Yip!.

Expected output:

Woof! I am Buddy
Yip! Said Buddy
Woof! I am Rex
Yip! Said Rex
Woof! I am Max
STEP 1 OF 2
    Ctrl + Enter to check

    Base Keyword in Python

    Keep going with PythonAbout 340 step-by-step lessons, from your first line of code to coding interviews. Free to start.
    Start learning free