问题
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.
回答1:
Don't forget math.hypot
def distance(self, p):
dx = self.X - p.X
dy = self.Y - p.Y
return hypot(dx, dy)
回答2:
You declared
distanceas taking an argumentp; inside the method you're referring to it asother. Changeptootherin the declaration so they match.sqrt()isn't a builtin; you need to doimport mathand 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.Xandp.Ydirectly given aPoint p.The
mathmodule 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:
def __str__(self):
return "Point(%s,%s)"%(self.X,self.Y)
This will be used when the object is printed, or otherwise needs to be converted to a string.
回答3:
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:
from math import sqrt
回答4:
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
来源:https://stackoverflow.com/questions/12468900/making-a-point-class-in-python