...

/

Solution: The Single Responsibility Principle

Solution: The Single Responsibility Principle

Learn how to refactor existing code in accordance with the Single Responsibility Principle.

We'll cover the following...

Solution overview

We have refactored the Student class in the following manner:

Press + to interact
main.py
classes.py
data.py
students_data = [
{'ID': 1, 'name':"Sarah", 'major':"International Relations",
'results':[
{'number': 1, 'gpa': 2.6, 'ch': 16},
{'number': 2, 'gpa': 3.25, 'ch': 17},
{'number': 3, 'gpa': 3.11, 'ch': 18},
{'number': 4, 'gpa': 2.9, 'ch': 19}
]
},
{'ID': 2, 'name':"Hannah", 'major':"Biology",
'results':[
{'number': 1, 'gpa': 3.0, 'ch': 14},
{'number': 2, 'gpa': 3.26, 'ch': 18},
{'number': 3, 'gpa': 3.5, 'ch': 17}
]
},
{'ID': 3, 'name':"Annie", 'major':"CS",
'results':[
{'number': 1, 'gpa': 1.5, 'ch': 16},
{'number': 2, 'gpa': 2.34, 'ch': 17},
{'number': 3, 'gpa': 2.8, 'ch': 17},
{'number': 4, 'gpa': 3.05, 'ch': 18},
{'number': 5, 'gpa': 3.46, 'ch': 17},
{'number': 6, 'gpa': 2.5, 'ch': 15}
]
},
{'ID': 4, 'name':"Oliver", 'major':"Marketing",
'gpas':[2.8, 2.5, 3.2, 3.5, 3.7],
'results':[
{'number': 1, 'gpa': 2.8, 'ch': 16},
{'number': 2, 'gpa': 2.5, 'ch': 17},
{'number': 3, 'gpa': 3.2, 'ch': 19},
{'number': 4, 'gpa': 3.5, 'ch': 17},
{'number': 5, 'gpa': 3.7, 'ch': 15}
]
},
{'ID': 5, 'name':"Charlie", 'major':"EE",
'gpas':[3.99, 4.0, 4.0, 4.0, 3.85, 3.95, 4.0],
'results':[
{'number': 1, 'gpa': 3.99, 'ch': 18},
{'number': 2, 'gpa': 4.0, 'ch': 16},
{'number': 3, 'gpa': 4.0, 'ch': 16},
{'number': 4, 'gpa': 4.0, 'ch': 16},
{'number': 5, 'gpa': 3.85, 'ch': 16},
{'number': 6, 'gpa': 3.95, 'ch': 17},
{'number': 7, 'gpa': 4.0, 'ch': 18}
]
},
{'ID': 6, 'name':"Ali", 'major':"CS",
'gpas':[2.9, 3.75, 3.5, 3.23, 3.65, 3.01, 3.15, 3.6],
'results':[
{'number': 1, 'gpa': 2.9, 'ch': 16},
{'number': 2, 'gpa': 3.75, 'ch': 17},
{'number': 3, 'gpa': 3.5, 'ch': 17},
{'number': 4, 'gpa': 3.23, 'ch': 19},
{'number': 5, 'gpa': 3.65, 'ch': 15},
{'number': 6, 'gpa': 3.01, 'ch': 17},
{'number': 7, 'gpa': 3.15, 'ch': 15},
{'number': 8, 'gpa': 3.6, 'ch': 16}
]
},
{'ID': 7, 'name':"Elizabeth", 'major':"CS",
'gpas':[3.67, 3.25, 3.76, 4.0, 3.6],
'results':[
{'number': 1, 'gpa': 3.67, 'ch': 15},
{'number': 2, 'gpa': 3.25, 'ch': 19},
{'number': 3, 'gpa': 3.76, 'ch': 18},
{'number': 4, 'gpa': 4.0, 'ch': 16},
{'number': 5, 'gpa': 3.6, 'ch': 16}
]
},
]

Code explanation

Our class Student originally handled two different responsibilities:

    ...