Hone

Lessons · Python · inheritance and super()

A subclass gets the parent's methods and can change some

class Puppy(Dog) makes Puppy a kind of Dog: every Dog method works on a Puppy, and Puppy can add or override methods. super() reaches the parent's version.

Hone is a place to practise programming. This is one of its lessons, written out in full and free to read without an account.

What it is for

A frame of code that is almost the same for several kinds of thing: a savings account is an account with interest, an admin is a user with extra powers. Inheritance keeps the shared part in one place.

How to think about it

Ask: is this a KIND OF that? If a Puppy is a Dog, inherit. If it merely uses a Dog, store one as an attribute instead. In the child's __init__, call super().__init__(...) first so the parent's attributes exist.

Worked example

class Dog:
    def __init__(self, name):
        self.name = name
    def speak(self):
        return self.name + ' says Woof'
class Puppy(Dog):
A Puppy is a Dog.
    def __init__(self, name):
        super().__init__(name)
Let Dog set up name first.
        self.age = 0
Then add what only a Puppy has.
    def speak(self):
Override: the child's version wins.
        return self.name + ' says Yip'
print(Puppy('Bo').speak(), isinstance(Puppy('Bo'), Dog))
Bo says Yip True

Your turn

Let the parent set up the shared attributes first.

class Admin(User):
    def __init__(self, name):
        .__init__(name)
        self.powers = ['ban']

The trap

Writing a child __init__ without calling super().__init__. The parent's attributes are never set, and the first self.name read raises AttributeError from somewhere far from the cause.

Next in Python

Every Python lesson on one page

Practise inheritance and super() on HoneA question on it now, a coding challenge where there is one, and it is remembered for review. Free, no email needed.