我正在用Python实现3D Vector类.我的向量有坐标x,y和z(所有浮点数),我需要决定如何存储这些信息.我在这里至少可以看到三个选项:
1)制作三个独立的浮点字段:self.x,self.y,self.z
class Vector:
def __init__(self, x, y, z):
self.x = x
self.y = y
self.z = z
Run Code Online (Sandbox Code Playgroud)
2)制作一个列表,比如说self.data,有三个元素.如果对象可以是常量,我也可以使用元组.
class Vector:
def __init__(self, x, y, z):
self.data = [x,y,z]
Run Code Online (Sandbox Code Playgroud)
3)制作一个numpy数组,比如self.data,有三个元素.
import numpy as np
class Vector:
def __init__(self, x, y, z):
self.data = np.array([x,y,z])
Run Code Online (Sandbox Code Playgroud)
对于选项(2)和(3),我可以实现属性和设置器来访问单个坐标
@property
def x(self):
return self.data[0]
Run Code Online (Sandbox Code Playgroud)
4)为什么不进行冗余?我可以同时拥有一个列表(或元组或numpy数组)和单独的字段x,y和z.
该类用于执行常见操作,例如向量添加,内积,叉积,旋转等.需要考虑这些操作的性能.
是否有我更喜欢的解决方案,为什么?