You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python入门:如何在Point类方法中接收同类对象作为参数并计算两点距离

解决你的Point类距离方法问题

嘿,我来帮你调整代码,让它支持直接传入另一个Point对象来计算距离!

问题分析

你当前的dFO方法设计是接收两个单独的x、y数值,但你想要的是传入一个已创建的Point实例(比如a.dFO(b)),核心就是要让方法接收Point对象作为参数,而不是零散的坐标值。

修改后的完整代码

import math

class Point:
    def __init__(self, x=0, y=0):
        self._x = x
        self._y = y
    
    # 重命名为你想要的distanceFromOther,参数改为另一个Point对象
    def distanceFromOther(self, other_point):
        # 访问传入的Point对象的_x和_y属性
        dx = self._x - other_point._x
        dy = self._y - other_point._y
        return math.sqrt(dx**2 + dy**2)
    
    def __str__(self):
        return f"({self._x}, {self._y})"

# 测试代码
a = Point(1, 1)
b = Point(2, 3)

# 现在可以直接传入Point对象b了
distance = a.distanceFromOther(b)
print(f"点{a}和点{b}之间的距离是: {distance}")
# 输出:点(1, 1)和点(2, 3)之间的距离是: 2.23606797749979

关键修改点

  • 参数调整:把方法的参数从(a, b)改成(other_point),明确这个参数是Point类的实例。
  • 属性访问:在方法内部,通过other_point._x和other_point._y获取另一个点的坐标值(虽然你用了下划线前缀标记“私有”,但Python中仍允许类外部访问这些属性,如果你想更规范,也可以添加getter方法,不过当前写法完全可以满足需求)。
  • 方法名优化:把dFO改成你最初想要的distanceFromOther,让方法名更具可读性,符合代码规范。

额外小提示

你也可以用math.hypot函数简化距离计算,代码会更简洁:

def distanceFromOther(self, other_point):
    dx = self._x - other_point._x
    dy = self._y - other_point._y
    return math.hypot(dx, dy)

math.hypot(dx, dy)会直接计算sqrt(dx² + dy²),效果和原来的写法完全一致,但代码更清爽。

内容的提问来源于stack exchange,提问作者kang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 17:48:15