定义一个三维向量类,并定义相应的特殊方法实现两个该类对象之间的加、减运算(要求支持运算符+、-),实现该类对象与标量的乘、除运算(要求支持运算符*、/),以及向量长度的计算(要求使用属性实现)。
class Vector3:
# 构造方法,初始化,定义向量坐标
def __init__(self, x, y, z):
self.__x = x
self.__y = y
self.__z = z
# 与两一个向量相加,对应分量相加,返回新向量
def __add__(self, anotherPoint):
x = self.__x + anotherPoint.__x
y = self.__y + anotherPoint.__y
z = self.__z + anotherPoint.__z
return Vector3(x, y, z)
# 减去另一个向量,对应分量相减,返回新向量
def __sub__(self, anotherPoint):
x = self.__x - anotherPoint.__x
y = self.__y - anotherPoint.__y
z = self.__z - anotherPoint.__z
return Vector3(x, y, z)
# 向量与一个数字相乘,各分量乘以同一个数字,返回新向量
def __mul__(self, n):
x, y, z = self.__x*n, self.__y*n, self.__z*n
return Vector3(x, y, z)
# 向量除以一个数字,各分量除以同一个数字,返回新向量
def __truediv__(self, n):
x, y, z = self.__x/n, self.__y/n, self.__z/n
return Vector3(x, y, z)
# 查看向量长度,所有分量平方和的平方根
@property
def length(self):
return (self.__x**2 + self.__y**2 + self.__z**2)**0.5
def __str__(self):
return 'Vector3({},{},{})'.format(self.__x,
self.__y,
self.__z)
# 用法演示
v1 = Vector3(3, 4, 5)
v2 = Vector3(5, 6, 7)
print(v1+v2)
print(v1-v2)
print(v1*3)
print(v2/2)
print(v1.length)
结果如下:
该代码定义了一个名为 Vector3
的类。
__init__
方法是类的构造方法,当创建 Vector3
类的实例时,它会被调用。它接受三个参数 x
、y
和 z
,这些参数代表向量在三维空间中的坐标。构造方法将这些值保存为实例变量 self.__x
、self.__y
和 self.__z
。变量名前有两个下划线,这表示它们是私有变量,通常不应该直接从类的外部访问。
__add__
方法定义了向量的加法操作。它接受另一个 Vector3
实例作为参数,并返回一个新的 Vector3
实例,其坐标是两个向量对应坐标的和。
__sub__
方法定义了向量的减法操作。它同样接受另一个 Vector3
实例作为参数,并返回一个新的 Vector3
实例,其坐标是两个向量对应坐标的差。
__mul__
方法定义了向量与一个数字的乘法操作。它接受一个数字 n
作为参数,并返回一个新的 Vector3
实例,其坐标是原向量各坐标乘以 n
的结果。
__truediv__
方法定义了向量除以一个数字的操作。它接受一个数字 n
作为参数,并返回一个新的 Vector3
实例,其坐标是原向量各坐标除以 n
的结果。
length
方法是一个属性装饰器,它允许我们以属性而不是方法的方式访问向量的长度。向量的长度是各分量平方和的平方根。
__str__
方法定义了类的实例如何被转换为一个字符串。这通常用于打印对象时。