python小知識(4) 如何讓物件可運算

2021-10-23 22:39:08 字數 1542 閱讀 3393

from math import hypot

class vector:

def __init__(self, x=0, y=0):

self.x = x

self.y = y

def __repr__(self):

return 'vector(%r, %r)' % (self.x, self.y)

def __abs__(self):

return hypot(self.x, self.y)

def __bool__(self):

return bool(abs(self))

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)

定義乙個向量類vector

__repr__  實現物件的字串表達方式,也可實現__str__

__abs__ 實現模運算,呼叫方式 abs(v)

例項:

c = vector(3,4)

abs(c)

# out[4]: 5.0

c# out[5]: vector(3, 4)

str(c)

# out[6]: 'vector(3, 4)'

repr(c)

# out[7]: 'vector(3, 4)'

print('%s' % c)

# vector(3, 4)

__add__ 和 __mul__ 實現了 + 和 * 運算

c+vector(3,4)

# out[15]: vector(6, 8)

c*3# out[16]: vector(9, 12)

__bool__ 實現了 bool型別

當向量模為0時 返回false,否則返回true

bool(c)

#out[18]: true

bool(vector(0,0))

#out[19]: false

bool(vector(-3,-4))

# out[20]: true

更高效的實現:

def __bool__(self):

return bool(self.x or self.y)

省略了模運算的過程

驗證:

bool(3 or 4)

#out[21]: true

bool(-3 or 4)

#out[22]: true

bool(0 or 4)

#out[23]: true

bool(0 or 0)

#out[24]: false

Python小知識點(4)

bin 6 0b110 s bin 6 s 0b110 type s 例如,為了把標準庫time中的函式sleep的功能遮蔽 mock 我們可以在程式初始化時呼叫 time.sleep lambda x none。這樣,在後續 中呼叫time庫的sleep函式將不會執行原有的功能。例如,執行time...

python小知識 Python小知識

1 python是一種解釋性語言,當程式執行時,一行一行的解釋,並執行 優點 除錯 很方便,開發效率高,並且可以跨平台 不但入門容易,而且將來深入下去,可以編寫那些非常非常複雜的程式。缺點 執行速度慢。python的種類 cpython ipython pypy jython ironpython ...

python小知識 python小知識

一 列表 l 1,2 m l l和m同時指向列表物件,內容為 1,2 l l 3,4 系統新增了乙個物件,內容為 1,2,3,4 l,m 1,2,3,4 1,2 l 1,2 m l l 3,4 對列表在原處做修改 l,m 1,2,3,4 1,2,3,4 二 python程式設計中的中文編碼問題 問題...