Python新手面向对象编程疑问:Line类距离与斜率实现问题
Line类实现问题排查与修正
你使用索引读取坐标的思路本身是可行的,但当前代码存在核心错误,具体问题和修正方案如下:
- 核心运行错误:实例方法中访问实例属性必须加
self前缀,你当前的distance和slope方法直接使用coord1、coord2,Python会将其识别为未定义的局部变量,调用方法时会直接抛出NameError。 - 边界逻辑缺失:计算斜率时如果两点x坐标相等,会触发除以零的报错,对应竖直线斜率不存在的场景,建议增加判断逻辑避免报错。
- 可读性优化:索引取值逻辑本身没有问题,只要保证传入的
coord1、coord2是长度为2的存储x、y坐标的序列(列表、元组均可)即可,提前拆分坐标变量可以大幅提升代码可读性。
修正后的可运行代码如下:
class Line(): def __init__(self, coord1, coord2): self.coord1 = coord1 self.coord2 = coord2 def distance(self): x1, y1 = self.coord1 x2, y2 = self.coord2 return ((x2 - x1)**2 + (y2 - y1)**2)**0.5 def slope(self): x1, y1 = self.coord1 x2, y2 = self.coord2 if x2 == x1: raise ValueError("两点x坐标相同,直线为竖直线,斜率不存在") return (y2 - y1) / (x2 - x1)
内容的提问来源于stack exchange,提问作者Mourya
相关产品推荐
相关产品推荐

