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):
- call the parent's version with
super().bark(), soWoof! I am <name>still prints; - 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.nameis the name stored byDog.__init__;Puppyhas 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()
buddyis aPuppy: itsbarkprints the parent's line, then its own.rexis anotherPuppy: the names come from the object, nothing is hard-coded.dogis a plainDog: itsbarkis unchanged and prints only the parent's line, with noYip!.
Expected output:
Woof! I am Buddy
Yip! Said Buddy
Woof! I am Rex
Yip! Said Rex
Woof! I am Max
Free plan: 30 tutor messages. Premium is unlimited.
