I am trying to create a class in python titled "Point." I am trying to create a point on a coordinate plane x and y and track them. As well as find the distance between the points. I have to use functions and methods. I have started and here is my code. I am just not sure how to use it when I go to execute the program. Any help will be appreciated.
EDIT: Updated Code
import math
class Point(object):
'''Creates a point on a coordinate plane with values x and y.'''
COUNT = 0
def __init__(self, x, y):
'''Defines x and y variables'''
self.X = x
self.Y = y
def move(self, dx, dy):
'''Determines where x and y move'''
self.X = self.X + dx
self.Y = self.Y + dy
def __str__(self):
return "Point(%s,%s)"%(self.X, self.Y)
def getX(self):
return self.X
def getY(self):
return self.Y
def distance(self, other):
dx = self.X - other.X
dy = self.Y - other.Y
return math.sqrt(dx**2 + dy**2)
def testPoint(x=0,y=0):
'''Returns a point and distance'''
p1 = Point(3, 4)
print p1
p2 = Point(3,0)
print p2
return math.hypot(dx, dy)
print "distance = %s"%(testPoint())
I still need help understanding how to actually use the code. That's why I created the testPoint
function. When I actually go to execute the code in IDLE, how do I prove that everything works? Thanks a bunch guys!!
I also need to add code to the constructor to increment COUNT
by 1 every time a Point object is created. I also need to add appropriate code so that points can be compared using the comparison operators while 'points' are compared based on their distance from the origin.
Since you asked about executing the program, if you want to run it from the command line, the first thing you should do is just add:
There are really good explanations of what this does (see: What does if __name__ == "__main__": do?). But at the highest level, this will call your test function when you enter
python yourfilename.py
at the command prompt. The you can start debugging by seeing what errors are thrown and what happens when you make the changes given in the other answers.To incement COUNT everytime you create a point to your
__init__
you'd add:Point.COUNT += 1
. COUNT is an class variable of the Point class. A quick note on style, PEP 8 says that "constants are usually defined on a module level and written in all capital letters with underscores separating words." So you'd want to call itcount
since it is a mutable class variable. Finally at the bottom of your testPoint function add a lineprint Point.count
so you can see how many points you created.In your Point.distance method, you reference other.X and other.Y; Other does not exists.
You should either change the distance signature to be distance(self, other) or change the code to use p.
You will also need to import math.sqrt:
You declared
distance
as taking an argumentp
; inside the method you're referring to it asother
. Changep
toother
in the declaration so they match.sqrt()
isn't a builtin; you need to doimport math
and refer to it asmath.sqrt()
.You aren't doing anything with the
testPoint()
function you declare; you can invoke it by adding a line at the end like:print "distance = %s"%(testPoint())
At that point, your code works and computes a distance of 4.0 between your points.
Now, some style issues:
In Python, you don't generally privatize member variables, and you don't bother writing trivial getters and setters, so you can remove the
getX()
andgetY()
methods and just refer top.X
andp.Y
directly given aPoint p
.The
math
module has a convenient hypotenuse function, so indistance()
you can change the return line toreturn math.hypot(dx,dy)
.By default, a user defined object has an unattractive string representation:
<__main__.Point object at 0x1004e4550>
You should define a string conversion method in your class like so:
This will be used when the object is printed, or otherwise needs to be converted to a string.
Don't forget
math.hypot
Hum, why not use complex instead of a point class? It has all the properties you are searching for and more (such as rotation).
Here is an example to "OOP" the complex with a pedantic notation:
https://gist.github.com/jul/9286835