定义一个三维向量类Vector3,并实现python中的特殊方法以进行两个该类对象之间的加、减、乘、除运算(要求支持运算符+、-、*、/);实现向量长度的计算(要求使用属性实现,且该属性是可读、可写、可删除)
时间: 2023-07-10 12:24:43 浏览: 198
好的,以下是Vector3类的实现:
```python
class Vector3:
def __init__(self, x=0, y=0, z=0):
self.x = x
self.y = y
self.z = z
def __str__(self):
return f"({self.x}, {self.y}, {self.z})"
def __add__(self, other):
return Vector3(self.x + other.x, self.y + other.y, self.z + other.z)
def __sub__(self, other):
return Vector3(self.x - other.x, self.y - other.y, self.z - other.z)
def __mul__(self, other):
if isinstance(other, Vector3):
return Vector3(self.y * other.z - self.z * other.y,
self.z * other.x - self.x * other.z,
self.x * other.y - self.y * other.x)
else:
return Vector3(self.x * other, self.y * other, self.z * other)
def __truediv__(self, other):
return Vector3(self.x / other, self.y / other, self.z / other)
def __len__(self):
return int((self.x ** 2 + self.y ** 2 + self.z ** 2) ** 0.5)
def __setattr__(self, attr, value):
if attr == 'length':
ratio = value / len(self)
self.x *= ratio
self.y *= ratio
self.z *= ratio
else:
super().__setattr__(attr, value)
def __delattr__(self, attr):
if attr == 'length':
del self.__dict__['length']
else:
super().__delattr__(attr)
length = property(fget=__len__, fset=__setattr__, fdel=__delattr__)
```
在上面的代码中,我们定义了一个三维向量类Vector3,它有三个属性x、y、z,表示向量在三个维度上的分量。我们还实现了__str__、__add__、__sub__、__mul__、__truediv__、__len__等特殊方法,使得我们可以对两个Vector3对象进行加、减、乘、除运算,并且可以使用运算符+、-、*、/。
此外,我们还使用@property装饰器定义了一个可读、可写、可删除的属性length,它表示向量的长度。我们在__setattr__、__delattr__方法中实现了对length属性的设置和删除,使得我们可以通过设置length属性来改变向量的长度。
阅读全文