Lecture 19 — Classes, Part 2¶
Overview¶
Review of classes
Revisiting our Yelp data: a
Restaurant
class.Techniques that we will see:
Calling class methods from within the class
Class objects storing other objects, such as lists
Lists of class objects
Review of Classes¶
We will use our Point2d
class solution from Lecture 18 to review
the following:
Attributes:
These store the data associated with each class instance.
They are usually defined inside the class to create a common set of attributes across all class instances.
Initialization: function
__init__
called when the object is created.Should assign initial values to all attributes
Methods
Each includes the object, often referred to as
self
, as the first argument.Some change the object, some create new objects
Special methods start and end with two underscores. Python interprets their use in a variety of distinct ways:
__str__
is the string conversion function__add__
,__sub__
, etc. become operators
Each of these special methods builds on the “more primitive” methods
Larger Example — Restaurant Class¶
Recall Lab 5 on the Yelp data:
Read and parse input lines that look like:
The Greek House|42.73|-73.69|27 3rd St+Troy, NY 12180|\ http://www.yelp.com/biz/the-greek-house-troy|Greek|1|5|4|5|4|4|5|5|5|5|5|4
Find restaurants and print out information based on a user selection
Original implementation based on a list was awkward:
We had to remember the role of each index of the list — 0 was the name, 1 was the latitude, etc.
New implementation here is based on a class
Start to a Solution, the Main Code¶
Let’s look at lec19_restaurants_exercise.py
, downloadable as part
of the Lecture_19 zip file in the Course Materials section of Submitty:
This is the code that uses the
Restaurant
class.We start by considering how the class will be used rather than how we write it.
Main function to initialize a restaurant is called
convert_input_to_restaurant
Parses a restaurant line
Creates and returns a
Restaurant
object
Function
build_restaurant_list
Opens the input file
Reads each line
Calls
convert_input_to_restaurant
, and appends the resulting restaurant to the back of a list
Main code:
Builds the restaurant list
Prints the first three restaurants in the list
Includes commented-out code that
Gets the name of a city
Finds the restaurant with the highest average rating
We will complete this code soon.
Functionality Needed in the Restaurant Class¶
Some functionality is determined by reading the code we have already written
Includes both methods and attributes
Add other functionality by considering the methods that must be in the
Restaurant
class, including the parameters that must be passed to each method.Add attributes last…
Turning to the Actual Restaurant Class¶
Look at Restaurant.py
which was distributed with the Lecture_19
files.
The
__init__
function specifies the attributes.Other attributes could be added, such as the average rating, but instead these are computed as needed by methods.
Importantly, each class object stores a list of ratings, illustrating the fact that classes can store data structures such as lists, sets, and dictionaries.
The
Restaurant
class has more complicated attributes than our previous objectsPoint2d
object,A list for the address entries
A list of scores
There is nothing special about working with these attributes other than they “feel” more complicated.
Just apply what you know in using them
Our lecture exercises will help
In-Class Example¶
Together we will add the following two methods to Restaurant
to get
our demonstration example to work:
The
is_in_city
methodThe
average_review
method
Discussion¶
What is not in the
Restaurant
class?No input or line parsing. Usually, we don’t want the class tied to the particular form of the input.
As an alternative, we could add a method for each of several different forms of input.
Often it is hard to make the decision about what should be inside and what should be outside the class.
One example the method we wrote to test if restaurant is in a particular city. As an alternative we could have written a different method that returns that name of the city and make the comparison outside the class.
We could add an
Address
class:Reuse for objects other than restaurants
Not needed in this (relatively) short example.
More flexible than our use of a list of strings from an address line.
Summary¶
Review of the main components of a Python class:
Attributes
Methods
Special methods with names starting and ending with
__
Initializer method is most important
Important uses of Python classes that we have seen today:
Classes containing other objects as attributes
Lists of class objects.
Design of Python classes
Start by outlining how they are to be used
Leads to design of methods
Specification of attributes and implementation of methods comes last