Lesson 10
I am Your Father
Chapter 2: Inheritance
Implementing inheritance
Let us implement some of the classes in our RPG example. We will create a Character class, and a Enemy subclass that inherits from Character. For simplicity, we will only implement a subset of the attributes and methods.

First, we implement the Character class (with only a subset of attributes/methods).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | |
We then define the Enemy class, making it a subclass of Character (Line 1).
1 2 3 4 5 6 7 8 9 10 11 12 | |
In Line 3, super() refers to an instance of the superclass - in this case it is Character. Think of it as the ‘higher self’, if that makes sense! You can also use Character.__init__(self, name, health, ...), but it is extra work because you have to pass in self as the first parameter and worry about the name of the superclass. And if the name of the superclass changes one day, you will have to change this line too. So just use super() to spare yourself all the pain!
Line 3 initialises Enemy‘s attributes like self.name, self.health, self.strength and self.defence using the superclass’ __init__() method. Otherwise you will have to repeat yourself. If you skip this line, then your Enemy won’t have a name, health etc.
In Line 4, you initialise self.evilness separately, since this is specific to only the Enemy subclass.
Here is a bit of code to test your two classes. Copy all the code above and below and run it. Observe the output, and understand what is happening!
1 2 3 4 5 6 7 | |
You might notice that Enemy has fewer lines of code than Character, despite being more powerful. We did not have to explicitly define the attributes name, health, strength and defence in Enemy. Enemy inherits all these from Character, thus a simple call to the constructor of the superclass is sufficient.
evilman was also able to attack the poor boy without having to explicitly define the attack() method.
boy cannot however express an evil_laugh() because it neither implemented that method nor inherited that method from any superclass.