13.4 Hierarchical inheritance
Learning objectives
By the end of this section you should be able to
Label relationships between classes as types of inheritance. Construct classes that form hierarchical inheritance.
Hierarchical inheritance basics
Hierarchical inheritance is a type of inheritance in which multiple classes inherit from a single superclass. Multilevel inheritance is a type of inheritance in which a subclass becomes the superclass for another class. Combining hierarchical and multilevel inheritance creates a tree-like organization of classes.
Implementing hierarchical inheritance
Multiple classes can inherit from a single class by simply including the superclass name in each subclass definition.
Example 1 Choir members
class ChoirMember:
def display(self):
print("Current choir member")
class Soprano(ChoirMember):
def display(self):
super().display()
print("Part: Soprano")
class Soprano1(Soprano):
def display(self):
super().display()
print("Division: Soprano 1")
class Alto(ChoirMember):
def display(self):
super().display()
print("Part: Alto")
class Tenor(ChoirMember):
def display(self):
super().display()
print("Part: Tenor")
class Bass(ChoirMember):
def display(self):
super().display()
print("Part: Bass")
mem_10 = Alto()
mem_13 = Tenor()
mem_15 = Soprano1()
mem_10.display()
print()
mem_13.display()
print()
mem_15.display()
The code's output is:
Current choir member
Part: Alto
Current choir member
Part: Tenor
Current choir member
Part: Soprano
Division: Soprano 1
Note
Implementing hierarchical inheritance
Consider the program:
class A:
def __init__(self, a_attr=0):
self.a_attr = a_attr
class B(A):
def __init__(self, a_attr=0, b_attr=0):
super().__init__(a_attr)
self.b_attr = b_attr
class C(A):
def __init__(self, a_attr=0, c_attr=0):
super().__init__(a_attr)
self.c_attr = c_attr
class D(B):
def __init__(self, a_attr=0, b_attr=0, d_attr=0):
super().__init__(a_attr, b_attr)
self.d_attr = d_attr
b_inst = B(2)
c_inst = C(c_attr=4)
d_inst = D(6, 7)
Note
Overriding methods
Define three classes: Instrument, Woodwind, and String.
Instrument has instance attribute owner, with default value of "unknown".Woodwind inherits from Instrument and has instance attribute material with default value of "wood".String inherits from Instrument and has instance attribute num_strings, with default value of 4.
The output should match:
This flute belongs to unknown and is made of silver
This cello belongs to Bea and has 4 strings
# Define Instrument class
# Define Woodwind class
# Define String class
print(f"This flute belongs to {flute_1.owner} and is made of {flute_1.material}")
print(f"This cello belongs to {cello_1.owner} and has {cello_1.num_strings} strings")