Python如何实现独立Point点类与Line线类并实现属性交互
实现代码
1. 完善point.py(新增索引访问支持)
class point: def __init__(self, x, y, z=0): self.x = float(x) self.y = float(y) self.z = float(z) # 实现索引访问逻辑,支持`point[0]`取x坐标、`point[1]`取y坐标、`point[2]`取z坐标 def __getitem__(self, index): if index == 0: return self.x elif index == 1: return self.y elif index == 2: return self.z else: raise IndexError("坐标索引仅支持0(x)/1(y)/2(z)")
2. Line类实现(独立脚本,无Point继承)
import point import math class line: def __init__(self, p1, p2): # 自动适配两种入参格式 self.p1 = self._convert_to_point(p1) self.p2 = self._convert_to_point(p2) # 内部工具方法:统一将输入转换为point实例 def _convert_to_point(self, input_p): if isinstance(input_p, (tuple, list)): # 自动解包2/3位坐标元组/列表创建point实例 return point.point(*input_p) elif isinstance(input_p, point.point): # 已实例化的point对象直接复用 return input_p else: raise TypeError("仅支持传入坐标元组/列表或point实例") # 修复长度计算逻辑,支持3D坐标计算 def length(self): dx = self.p2.x - self.p1.x dy = self.p2.y - self.p1.y dz = self.p2.z - self.p1.z return math.sqrt(dx**2 + dy**2 + dz**2)
功能验证示例
# 方式1:直接传入坐标元组创建line line1 = line((1,2), (3,4,5)) print(line1.p2.x) # 输出3.0 print(line1.p2[0]) # 输出3.0 print(line1.length()) # 输出约4.898979485566356 # 方式2:传入已实例化的point对象创建line p1 = point.point(1,2) p2 = point.point(3,4,5) line2 = line(p1, p2) print(line2.p1.y) # 输出2.0 print(line2.p1[1]) # 输出2.0 print(line2.length() == line1.length()) # 输出True
内容的提问来源于stack exchange,提问作者phultberg
相关产品推荐
相关产品推荐

