Lecture 19 — Classes, Part 2¶
Overview¶
- Review of classes
TimeOfDay
class- Lab 4 revision
- 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 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
- Each includes the object, often referred to as
- Special methods start with two underscores. Python interprets their
use in a variety of distinct ways:
__init__
is the initializer__str__
is the string conversion function__add__
,__sub__
, etc. become operators
TimeOfDay Class¶
- Listed in the Lecture 18 notes, but we have not gotten to it yet.
- Access information about hours, minutes and seconds
- AM or PM
- Convert to string
- Addition of times
- Difference between two times.
- Many other methods.
- Only attribute is the number of seconds since midnight.
- This is not known to the code that uses the
TimeOfDay
class. - It is done for programming convenience, as we will discuss in lecture.
- Example of encapsulation!
- This is not known to the code that uses the
Exercises¶
We will work through the implementation details together during lecture. The skeleton implementation is:
- ::
“”” Class for storing time. Time is reported on a military (24 hour) clock
“”“
- class Time(object):
- def __init__(self, hr, min, sec):
- pass
- def convert(self):
- pass
- def __str__(self):
- pass
- def __add__(self, other):
- pass
- def __sub__(self, other):
- pass
- if __name__ == ‘__main__’:
- pass
Larger Example — Restaurant Class¶
Recall Lab 4:
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 lattitude, etc.
New implementation here is based on a class
Start to a Solution, the Main Code¶
Let’s look at lec19_business_class.py
- Will be posted on the course web site.
- Main initializationFunction
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
- Gets a restaurant number from the user and prints it.
- Then ? - Not written yet. We can do whatever we want.
Exercises¶
Looking at the code that is in lec19_restaurant_exercise.py
- Outline the methods that must be in the
Restaurant
class, including the parameters that must be passed to each method.- Thus, the way we want to use the class is dictating how we write it.
- Implement the rest of the main code assuming these methods are implemented correctly.
- (A slightly different topic:) In several places throughout the code, restaurants and lists of restaurants are being copied or passed into functions. Why is this not a substantial waste of computation?
Turning to the Restaurant Class¶
Look at lec19_business_class.py
- Again, this will be posted as well.
- The exact set of methods is likely to be somewhat different from what you came up with for the exercises just completed.
- The
__init__
function specifies the attributes.- Others 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.
- We will briefly go over the remaining functions during lecture.
Exercises¶
- Write the
minscore
andmaxscore
methods. These should return -1 if the list is empty. - Add code to the end of
lec19_business_class.py
to test the functions you have added.
Discussion¶
- What is not in the
Restaurant
class?- No input or line parsing. Often, 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.
- For example, we could have a method that tells us if a restaurant is in a particular city, or we could write a different method that returns that name of the city and make the comparison outside the class.
- The
Restaurant
object stores a list as an attribute- This is our first example where the attributes are more than just simple variables.
- We could add an Address class:
- Reuse for objects other than restaurants
- Not needed in this (relatively) short example.
- Without it we store the address as a string; this feels like an incomplete implementation.
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:
- Calling class methods from other class methods
- Classes containing lists
- 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