如何添加距离方法

2024-06-16 09:33:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下代码:

class Point:
    """Two-Dimensional Point(x, y)"""
    def __init__(self, x=0, y=0):
        # Initialize the Point instance
        self.x = x
        self.y = y

    @property
    def magnitude(self):
        # """Return the magnitude of vector from (0,0) to self."""
        return math.sqrt(self.x ** 2 + self.y ** 2)

    def __str__(self):
        return 'Point at ({}, {})'.format(self.x, self.y)

    def __repr__(self):
        return "Point(x={},y={})".format(self.x, self.y)

这个类有一个称为magnitude的函数。我想创建一个函数,它可以告诉两个点之间的距离大小。以下是预期输出:

point1 = Point(2, 3)
point2 = Point(5, 7)
print(point1.magnitude)
    3.605551275463989
print(point2.magnitude)
    8.605551275463989
print(point1.distance(point2))
    5.0

我试过这样做:

 @classmethod
    def distance(self):
        pointmag1 = point1.magnitude
        pointmag2 = point2.magnitude
        if pointmag2 > pointmag1:
            return pointmag2 - pointmag1
        else:
            return pointmag1 - pointmag2

但是,这将返回一个错误TypeError:distance()接受1个位置参数,但给出了2个位置参数。我还觉得我采取了一种不正确的方法来解决这个问题,因为除了第1点或第2点以外,没有什么其他的方法能奏效。有谁能做得更好吗?谢谢

编辑:我做了以下修改:

 @classmethod
    def distance(self, self2):
        pointmag1 = point1.magnitude
        pointmag2 = point2.magnitude
        if pointmag2 > pointmag1:
            return pointmag2 - pointmag1
        else:
            return pointmag1 - pointmag2

但是,它返回4.996773991578637,而不是5。有什么方法可以更改它吗

编辑:我做了以下更改:

 @classmethod
    def distance(self, self2):
        pointmag1 = self.magnitude
        pointmag2 = self2.magnitude
        if pointmag2 > pointmag1:
            return pointmag2 - pointmag1
        else:
            return pointmag1 - pointmag2

这将返回错误类型error:“>;”“float”和“property”实例之间不支持


Tags: 方法selfreturnifdefelsedistancepoint
1条回答
网友
1楼 · 发布于 2024-06-16 09:33:23

您可以实现一个自定义的__sub__方法来查找距离:

class Point:
  def __init__(self, x=0, y=0):
    self.x = x
    self.y = y
  @property
  def magnitude(self):
    return math.sqrt(self.x ** 2 + self.y ** 2)
  def __sub__(self, _point):
     return pow(abs(_point.x-self.x)**2 + abs(_point.y-self.y)**2, 0.5)

point1 = Point(2, 3)
point2 = Point(5, 7)
print(point2-point1)

输出:

5.0

编辑:distance作为方法实现:

class Point:
  def __init__(self, x=0, y=0):
    self.x = x
    self.y = y
  def distance(self, _p2):
    return pow(abs(self.x-_p2.x)**2 + abs(self.y-_p2.y)**2, 0.5)

point1 = Point(2, 3)
point2 = Point(5, 7)
print(point1.distance(point2))

相关问题 更多 >