Solution: The Single Responsibility Principle
Learn how to refactor existing code in accordance with the Single Responsibility Principle.
We'll cover the following...
We'll cover the following...
Solution overview
We have refactored the Student
class in the following manner:
Press + to interact
Python 3.10.4
Files
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: