from math import hypot #定义向量的构造方法 class Vector: def __init__(self,x=0,y=0): self.x=x; self.y=y; ''' __repr__是python的内置方法,他能将一个对象用字符串的形式表达出来 %r用rper()方法处理对象 输出结果 'content' %s用str()方法处理对象 输出结果 content 不带引号 如果你只想实现这两个特殊方法中的一个,__repr__ 是更好的选择,因为如果一个对象 没有 __str__ 函数,而 Python 又需要调用它的时候,解释器会用 __repr__ 作为替代 ''' def __repr__(self): return 'Vector(%r,%r)' % (self.x,self.y) ''' 定义__abs__方法 返回hypot函数的运算结果 hypot() 返回欧几里德范数 sqrt(x*x + y*y)。 ''' def __abs__(self): return hypot(self.x,self.y) ''' bool(abs(self)) 把模值变成了布尔值 我们对 __bool__ 的实现很简单,如果一个向量的模是 0, 那么就返回 False,其他情况则返回 True。 如果想让 Vector.__bool__ 更高效,可以采用这种实现: def __bool__(self): return bool(self.x or self.y) ''' def __bool__(self): return bool(abs(self)) ''' __add__ 和 __mul__,这两个方法的返回值都是新创建的向量对象, other代表其他向量对象, 其返回值都是靠运算符 + 或者 * 实现的运算结果 ''' def __add__(self, other): x=self.x+other.x y=self.y+other.y return Vector(x,y) def __mul__(self,scalar): return Vector(self.x*scalar,self.y*scalar) #创建两个向量实例 v1 v2 print('=============================输出两个向量加运算========================') v1=Vector(2,4) v2=Vector(2,1) print(v1+v2) print('=============================输出单个向量欧几里德运算========================') # 求该向量的欧几里得范数 v=Vector(3,4) print(abs(v)) print('=============================输出单个向量的标量乘法运算========================') print(v*3) print(abs(v*3)) # (3*3)(3*3) +(4*3)(4*3) 的结果开方