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

Python Point类报错:unsupported operand type(s) for -: 'method' and 'method' 求助

解决TypeError: unsupported operand type(s) for -: 'method' and 'method'错误

你遇到的错误核心原因很直白:在DistanceFromPoint方法里,你直接写了self.getX和pX.getX,这是在引用方法对象本身,而不是调用方法获取返回的x值。Python里调用方法必须加(),不然就会把方法当成一个对象来处理,自然没法做减法运算。

修复步骤

修改Point类中的DistanceFromPoint方法,给getX和getY加上调用括号:

def DistanceFromPoint(self, pX):
    dx = self.getX() - pX.getX()  # 加括号调用方法获取数值
    dy = self.getY() - pX.getY()
    return math.sqrt((dx ** 2) + (dy ** 2))

这里的int()转换其实多余,因为getX和getY已经返回int类型了,直接相减即可。

额外优化建议

  1. 修复FromString方法的逻辑漏洞:当前的FromString如果传入类似"(5,10)"的字符串,x, y = Point_str会把字符串拆成单个字符,而非提取数字。可以改成:
@classmethod
def FromString(cls, Point_str):
    # 处理格式如"(5, 10)"的字符串
    cleaned = Point_str.strip('()').split(',')
    x = int(cleaned[0].strip())
    y = int(cleaned[1].strip())
    return cls(x, y)
  1. 简化属性访问(Pythonic写法):Python里没必要写getX、getY这类getter方法,直接访问self.x和self.y更简洁,除非你需要在获取属性时做额外逻辑。比如可以把DistanceFromPoint改成:
def DistanceFromPoint(self, pX):
    dx = self.x - pX.x
    dy = self.y - pX.y
    return math.sqrt(dx**2 + dy**2)

同时可以直接去掉冗余的getX、getY方法。

修复后的运行结果

修改后运行你的测试代码,针对三个共线点,isTriangle和isTriangle2都会返回False,符合预期:

(5, 10)
(7, 10)
False
False

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 23:01:33