13.4: Hierarchical Inheritance
( \newcommand{\kernel}{\mathrm{null}\,}\)
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.
Class B inherits from Class A
Class C inherits from Class B
Class C inherits from Class B
Class B inherits from Class A
Class C inherits from Class D
Class C inherits from Class D
Implementing hierarchical inheritance
Multiple classes can inherit from a single class by simply including the superclass name in each subclass definition.
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
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)
2
Error
Define three classes: Instrument
, Woodwind
, and String
.
Instrument
has instance attributeowner
, with default value of "unknown".Woodwind
inherits fromInstrument
and has instance attributematerial
with default value of "wood".String
inherits fromInstrument
and has instance attributenum_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