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类型了,直接相减即可。
额外优化建议
- 修复
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)
- 简化属性访问(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
相关产品推荐
相关产品推荐

