- Lab
-
Libraries: If you want this lab, consider one of these libraries.
- Cloud
Modeling Data with Classes in Python
Python is an object-oriented programming language, and lends itself to modeling problems using objects. In this hands-on lab, we'll be implementing a few different classes in order to create a todo list. The project has been documented with automated tests to help us verify that the code we've written will meet the requirements. By the time we're finished with this lab, we should be more comfortable creating classes and implementing methods on those classes.
Lab Info
Table of Contents
-
Challenge
Implement the `Todo` Class
The
Todoclass holds on to a few pieces of information:name: The name of the tododescription: The description of the todopoints: The difficulty/importance rating as an integer greater than zerocompleted: Whether or not the todo has been completed as a boolean
Our first step will be to remove the
passline and implement the__init__method:class Todo: # doctest omitted def __init__(self, name, description, points, completed=False): self.name = name self.description = description self.points = points self.completed = completedWe only needed to specify one default for
completed, and the rest of the arguments are required.Next, we'll need to customize how the object is printed out. We can do this by implementing either the
__str__method or the__repr__. The default implementation for__str__will use__repr__. But since we also want our todos to represent themselves well when we just return them, we'll implement__repr__.We also need to add a class-level variable to allow us to convert the boolean value of
completedinto a readable string.class Todo: # doctest and __init__ omitted statuses = { False: 'Incomplete', True: 'Complete' } def __repr__(self): return f"{self.name} ({self.statuses[self.completed]} - {self.points} points): {self.description}"With these two methods implemented, we have a working
Todoclass. -
Challenge
Implement the `TodoList` Class
The
TodoListclass only receives one argument and implements more functionality:todos: A list ofTodoobjects
Our first step will be to remove the
passline and implement the__init__method:class TodoList: # doctest omitted def __init__(self, todos): self.todos = todosIt doesn't get much simpler than that.
Next, we need to implement the
average_pointsfunction that will calculate the average of the points for all of theTodoobjects. The formula for calculating the average issum_of_points / number_of_todos, so let's write that now:class TodoList: # doctest and __init__ omitted def average_points(self): total = 0 for todo in self.todos: total += todo.points return total / len(self.todos)Finally, we need to implement two methods that return subsets of our
todos: thecompletedandincompletemethods. These methods will be almost exactly the same except we'll filter them with a different conditional:class TodoList: # doctest and other methods omitted def completed(self): results = [] for todo in self.todos: if todo.completed: results.append(todo) return results def incomplete(self): results = [] for todo in self.todos: if not todo.completed: results.append(todo) return resultsWith all of these methods implemented, we should have all of the doctests passing, and our classes working as expected.
About the author
Real skill practice before real-world application
Hands-on Labs are real environments created by industry experts to help you learn. These environments help you gain knowledge and experience, practice without compromising your system, test without risk, destroy without fear, and let you learn from your mistakes. Hands-on Labs: practice your skills before delivering in the real world.
Learn by doing
Engage hands-on with the tools and technologies you’re learning. You pick the skill, we provide the credentials and environment.
Follow your guide
All labs have detailed instructions and objectives, guiding you through the learning process and ensuring you understand every step.
Turn time into mastery
On average, you retain 75% more of your learning if you take time to practice. Hands-on labs set you up for success to make those skills stick.