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) 的結果開方