The reading for this assignment is Chapter 14
of How to think....
- Start with your solution to Homework 11 or download mine
- Using Evaluations 8 and 9 as a template, convert the
Date class so that it uses methods rather than functions. This
is a little tricky to do incrementally, because when you change
the definition of a function you also have to change the places
where it is invoked. Here are some suggestions on how to make
and test small changes:
- Move make_date inside the Date class and change the
name to __init__.
HINT: In emacs, there is a command in the
Python menu called Shift region right. If you select a block
of code and then invoke this command, it indents the entire block
Don't forget that inside an __init__, you get self
as a parameter, so you don't have to create it yourself, and you
don't have to return anything.
Now change the places where make_date is invoked so that they
instantiate Date objects.
- Move print_date inside the Date class and change the
name to __str__. Change the name of the parameter to
self and make the method fruitful; that is, it should return
a string representation of the date and print nothing.
Now change the place where print_date is invoked so it uses
a print statement.
- By now you should be getting the idea, so I will skip the
detailed instructions: just make days_since_2000 a method.
- That's it! Changing a function to a method is mostly a matter
of syntax; it doesn't really change what the program does. The
primary benefit of writing methods is that they organize the program
by associating data objects with the operations they can perform.
In a small program like this, that benefit is probably not apparent,
but as programs get bigger, this kind of organization is a useful
tool for managing complexity.