Main.ClassesIntroduction History
Hide minor edits - Show changes to markup
March 28, 2010, at 09:56 PM MST
by -
Added lines 1-100:
(:source lang=python:) """ Classes and objects http://openbookproject.net/thinkcs/python/english2e/ch13.html """
- Let's write a class that represent the mathematical notion of
- a point in two dimensions.
- A point is associated with two coordinates, and let's call them
- x and y.
- We could just store the two values in a list or a tuple.
- But when we put them in an object we can also give the object
- methods that are appropriate for a two dimensional point.
- Here's the simplest way to define a class:
class Point :
pass
- Let's create an instance of the class:
p = Point()
- we just called the constructor of the Point class.
- Attributes
- Attributes are the data that are associated with an object
- We can add/access attributes using the dot notation:
p.x = 3 p.y = 4
- We can now do things with objects of this class:
def distance_to_origin(p) :
"""compute the distance of a point from the origin"""
import math
return math.sqrt(p.x*p.x + p.y *p.y)
- now we can do:
print distance_to_origin(p)
- Issues:
- we want to be able to do p.distance() as opposed to calling it
- as a regular function, i.e. we want distance to be a method of Point.
- How do we make sure that a point has x and y attributes?
- Let's redefine the Point class:
import math class Point :
def __init__(self, x, y) :
self.x = x
self.y = y
def distance_to_origin(self) :
"""compute the distance of a point from the origin"""
return math.sqrt(self.x*self.x + self.y *self.y)
def distance(self, other) :
"""compute the distance between a point object and another
point object"""
return math.sqrt((self.x - other.x)**2 +
(self.y - other.y)**2)
p1 = Point(1, 2) p2 = Point(4, 6) print p1.distance(p2)
- let's print the objects:
print p1 print p2
- the result is not very informative.
- let's fix that using the __str__ method:
import math class Point :
def __init__(self, x, y) :
self.x = x
self.y = y
def distance_to_origin(self) :
"""compute the distance of a point from the origin"""
return math.sqrt(self.x*self.x + self.y *self.y)
def distance(self, other) :
"""compute the distance between a point object and another
point object"""
return math.sqrt((self.x - other.x)**2 +
(self.y - other.y)**2)
def __str__(self) :
return "Point object with x = d" % (self.x, self.y)
p1 = Point(1, 2) p2 = Point(4, 6)
- printing the ojbects produces a more informative result:
print p1 print p2
- As a rule, whenever you write a classe you should also write
- an __str__ method - it's very useful for debugging!
(:sourceend:)
