Lesson 27 - Classes and functions

advertisement
Lesson 27
Classes and Functions
Python Mini-Course
University of Oklahoma
Department of Psychology
1
Python Mini-Course: Lesson 27
6/17/09
Lesson objectives
1. Create functions that operate on
objects
2. Differentiate between pure functions
and modifiers
3. Use argument checking in functions
2
Python Mini-Course: Lesson 27
6/17/09
The Time class
 Throughout this lesson, we will be
using the custom Time class
 See time.py
 In IDLE, run the time.py script to
define the Time class and functions
 We can now use these at the
command line
3
Python Mini-Course: Lesson 27
6/17/09
Creating time objects
time1 = Time(1,0,0)
print_time(time1)
time2 = Time(0,30,5)
print_time(time2)
4
Python Mini-Course: Lesson 27
6/17/09
Passing by reference
 A variable name is a pointer to the memory
location where data are stored
 When you pass an argument to a function,
you are passing in the pointer
 If the function changes the value of an
argument, it changes the data in the
memory location
 This is then seen outside the function
5
Python Mini-Course: Lesson 27
6/17/09
Modifier functions
 Modifiers can (and usually do)
change the value of arguments
that are passed into the function
 See the increment_time() function
6
Python Mini-Course: Lesson 27
6/17/09
Modifier functions: Example
increment_time(time1, time2)
print_time(time1)
print_time(time2)
7
Python Mini-Course: Lesson 27
6/17/09
Pure functions
 Pure functions do not change the
value of any arguments
 See the add_time() function
8
Python Mini-Course: Lesson 27
6/17/09
Pure functions: Example
time3 = add_time(time1, time2)
print_time(time1)
print_time(time2)
print_time(time3)
9
Python Mini-Course: Lesson 27
6/17/09
Argument checking
 Try this:
time4 = Time(0,90,0)
increment_time(time4, time1)
increment_time(time4, 30)
10
Python Mini-Course: Lesson 27
6/17/09
Argument checking
 Two problems:
1. The Time class allows invalid times
(>60 minutes or seconds)
2. The increment_time() function is
designed to accept two time
object, but the wrong data types
were passed to it
11
Python Mini-Course: Lesson 27
6/17/09
Argument checking
 Solutions:
1. Check the formatting of the time
2. Check the type for the input
argument
12
Python Mini-Course: Lesson 27
6/17/09
The valid_time() function
def valid_time(t):
validity = True
# All values must be at least zero
if t.hours < 0 or t.minutes < 0 or t.seconds < 0:
validity = False
# Minutes and seconds must be base 60
if t.minutes >= 60 or t.seconds >= 60:
validity = False
return validity
13
Python Mini-Course: Lesson 27
6/17/09
Adding argument checking
def increment_time(t1, t2):
"""
Given two Time objects t1 and t2, add t2 to t1
"""
# Check the input arguments
if type(t1) != Time or type(t2) != Time:
raise AttributeError, \
'invalid argument passed to increment_time'
if not valid_time(t1) or not valid_time(t2):
raise ValueError, 'invalid Time object in increment_time'
# Add the times
t1.hour
+= t2.hour
t1.minute += t2.minute
t1.second += t2.second
14
Python Mini-Course: Lesson 27
6/17/09
Download