我正在尝试在Python中创建一个简单的Point类,它将能够在另一个Point对象或另一组参数传递的坐标之间进行一些简单的三角计算。
我面临的问题是,当我将另一个Point
对象作为参数传递给distance_from_point
方法时,Python在从继承函数getx()
和gety()
返回时不将其属性视为整数数据类型。
我尝试将传递的参数转换为Point对象,但它似乎没有保留从两个get方法返回的整数值。
这是我的班级:
import math
class Point:
def __init__(self, x=0.0, y=0.0):
self._x = x
self._y = y
def getx(self):
return self._x
def gety(self):
return self._y
def distance_from_xy(self, x, y):
return math.sqrt(self.getx()*x + self.gety()*y)
def distance_from_point(self, point):
myPoint = Point(point)
return math.sqrt(self.getx()* myPoint.getx() + self.gety()*myPoint.gety())
point1 = Point(0, 0)
point2 = Point(1, 1)
print(point1.distance_from_point(point2))
print(point2.distance_from_xy(2, 0))
我收到的错误信息是:
Traceback (most recent call last):
File "main.py", line 24, in <module>
print(point1.distance_from_point(point2))
File "main.py", line 19, in distance_from_point
return math.sqrt(self.getx()* myPoint.getx() + self.gety()*myPoint.gety())
TypeError: unsupported operand type(s) for *: 'int' and 'Point'
如果myPoint继承自Point类,它不应该看到get方法,它也应该从另一个Point对象返回整数值?我理解对了吗?
你传递了一个point的类实例给你的方法。
print(point1.distance_from_point(point2))
现在在你的类方法
中def distance_from_point(self, point):
myPoint = Point(point)
return math.sqrt(self.getx()* myPoint.getx() + self.gety()*myPoint.gety())
这里的局部变量是Point的实例。然后传递该变量以创建一个新的Point对象(不需要这样做)。然后将一个点实例传递给点对象。所以新的myPoint对象上的x现在被设置为point的实例而不是int。只需完全删除这一行,并引用局部变量point,它是point实例。
def distance_from_point(self, point):
return math.sqrt(self.getx() * point.getx() + self.gety() * point.gety())