首页 > 解决方案 > Python中的格式问题

问题描述

我正在尝试在 Python 中创建一个简单的 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 对象返回整数值吗?我是否正确/在正确的轨道上理解这一点?

标签: python

解决方案


您将点的类实例传递给您的方法。

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 实例的局部变量点。

    def distance_from_point(self, point):
        return math.sqrt(self.getx() * point.getx() + self.gety() * point.gety())

推荐阅读