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: