Lesson 26 Classes and Objects Python Mini-Course University of Oklahoma Department of Psychology 1 Python Mini-Course: Lesson 26 6/16/09 Lesson objectives 1. Write a class definition 2. Instantiate objects 3. Assign values to attributes 4. Change attribute values 5. Copy objects 2 Python Mini-Course: Lesson 26 6/16/09 Class definition Use the class keyword Example: class Point(object): """ represents a point in 2-D space """ print Point 3 Python Mini-Course: Lesson 26 6/16/09 Instantiating an object Call the class constructor by using the class name as if it were a function Example: p1 = Point() print p1 4 Python Mini-Course: Lesson 26 6/16/09 Assigning attribute values Use the object name and the attribute name with dot notation Example: p1.x = 3.0 p1.y = 4.0 print p1.x, p1.y 5 Python Mini-Course: Lesson 26 6/16/09 Assigning attribute values These are called instance attributes p2 = Point() p2.x, p2.y = 12.0, 13.0 print p1.x, p1.y print p2.x, p2.y 6 Python Mini-Course: Lesson 26 6/16/09 Note on attributes Python handles attributes somewhat differently from other OOP languages All attributes are "public" Attributes can be created on the fly 7 Python Mini-Course: Lesson 26 6/16/09 Using attributes Object attributes are just like any other variable print '(%g, %g)' % (p1.x, p1.y) from math import sqrt distance = sqrt(p1.x**2 + p2.y**2) print distance 8 Python Mini-Course: Lesson 26 6/16/09 Note: Objects are data types You can pass objects to functions and return them from functions, just like any other data type 9 Python Mini-Course: Lesson 26 6/16/09 Example: def print_point(p): print '(%g, %g)' % (p.x, p.y) print_point(p1) NB: this example violates the principle of encapsulation 10 Python Mini-Course: Lesson 26 6/16/09 Encapsulation Examples rectangle1.py rectangle2.py rectangle3.py 11 Python Mini-Course: Lesson 26 6/16/09 Aliasing Try this: box = Rectangle(10.0, 200.0) box1 = box box1.width = 100.0 print box.width, box1.width box1 is box 12 Python Mini-Course: Lesson 26 6/16/09 Copying Use the copy module import copy box2 = copy.copy(box) box2.width = 50.0 print box.width, box2.width box2 is box 13 Python Mini-Course: Lesson 26 6/16/09 Limitations of copying box2.corner.x = 2.0 print box.corner.x box2.corner is box.corner 14 Python Mini-Course: Lesson 26 6/16/09 Deep copying Use the copy module box3 = copy.deepcopy(box) box3.corner.x = 1.0 print box.corner.x, box3.corner.x box3.corner is box.corner 15 Python Mini-Course: Lesson 26 6/16/09