Single Responsibility Principle
"There should never be more than one reason for a class to change."
The Single Responsibility Principle (SRP) is one of the five principles of object-oriented design known as S.O.L.I.D.
It states that a class should have only one reason to change, meaning it should only have one central job or responsibility. This principle helps in creating more maintainable and understandable code.
Example:
The wrong way:
class ToDoList:
def __init__(self):
self.tasks = []
def add_task(self, task: str):
self.tasks.append(task)
def delete_task(self, task: str):
self.tasks.remove(task)
def get_tasks(self):
return self.tasks
def input_tasks(self):
tasks = input("Enter a task: ")
self.add_task(tasks)
def remove_task(self):
tasks = input("Enter a task to remove: ")
self.delete_task(tasks)
# the ToDoList class handles multiple responsibilities:
# managing tasks, handling user input, and displaying tasks.
# This violates the SRP, which states that a class should have only
# one reason to change.
The right way:
class TaskManager:
def __init__(self):
self.tasks = []
def add_task(self, task: str):
self.tasks.append(task)
def delete_task(self, task: str):
self.tasks.remove(task)
def get_tasks(self):
return self.tasks
class TaskInputHandler:
def __init__(self, task_manager: TaskManager):
self.task_manager = task_manager
def input_tasks(self):
tasks = input("Enter a task: ")
self.task_manager.add_task(tasks)
def remove_task(self):
tasks = input("Enter a task to remove: ")
self.task_manager.delete_task(tasks)
class TaskDisplay:
def __init__(self, task_manager: TaskManager):
self.task_manager = task_manager
def display_tasks(self):
for task in self.task_manager.get_tasks():
print(f"Task: {task}")