python基礎高階 魔術方法之一元,二元運算子

2021-10-14 06:40:21 字數 3926 閱讀 5910

一元運算子有+,-,~等,要想使這些一元運算子對物件起作用,需要在定義類的時候實現對應的魔術方法。

定義乙個座標類

class

coordinate

(object):

def__init__

(self, x, y)

: self.x = x

self.y = y

def__pos__

(self)

:return self

def__neg__

(self)

:return coordinate(

-self.x,

-self.y)

def__abs__

(self)

: new_coordinate = coordinate(

abs(self.x)

,abs

(self.y)

)return new_coordinate

def__invert__

(self)

: new_coordinate = coordinate(

360- self.x,

360- self.y)

return new_coordinate

def__str__

(self)

:return

"(%s, %s)"

%(self.x, self.y)

pos, neg, abs, __invert__都是魔術方法,他們的作用分別如下。

在物件前面使用+的時候會被呼叫,類中定義的是直接返回物件本身。

c1 = coordinate(

-100,-

200)

print

(c1)

print

(+c1)

輸出:(

-100,-

200)(-

100,

-200

)

__neg__函式在物件前面使用-的時候會後會被呼叫,這裡返回座標都是相反數的新物件。

c1 = coordinate(

-100,-

200)

print

(c1)

c2 =

-c1print

(c2)

輸出:(

-100,-

200)

(100

,200

)

在給物件執行abs的時候會被呼叫,這裡返回座標絕對值的新物件

c1 = coordinate(

-100,-

200)

print

(abs

(c1)

)輸出:

(100

,200

)

在物件前面使用~的時候會被呼叫,這裡返回通過360減掉之後的新座標物件。

c1 = coordinate(

-100,-

200)

print

(~c1)

輸出:(

460,

560)

注意:這些魔術方法並不需要有返回值,比如上面的__neg__也可以修改物件本身,像下面這樣。

def

__neg__

(self)

: self.x =

-self.x

self.y =

-self.y

c1 = coordinate(

-100,-

200)

print

(c1)

-c1print

(c1)

輸出:(

-100,-

200)

(100

,200

)

二元運算子是作用在兩個元素上的,比如+,-,*,\都是二元運算子。

#!/usr/bin/env python

# -*- coding: utf-8 -*-

# @file : magicbinaryoperator.py

# @author: riclee

# @date : 2020/8/10

# @desc :

class

coordinate

(object):

def__init__

(self, x, y)

: self.x = x

self.y = y

def__add__

(self, other)

: x = self.x + other.x

y = self.y + other.y

return coordinate(x, y)

def__sub__

(self, other)

: x = self.x - other.x

y = self.y - other.y

return coordinate(x, y)

def__mul__

(self, other)

: x = self.x * other.x

y = self.y * other.y

return coordinate(x, y)

def__truediv__

(self, other)

: x = self.x / other.x

y = self.y / other.y

return coordinate(x, y)

def__floordiv__

(self, other)

: x = self.x // other.x

y = self.y // other.y

return coordinate(x, y)

def__mod__

(self, other)

: x = self.x % other.x

y = self.y % other.y

return coordinate(x, y)

def__str__

(self)

:return

"(%s, %s)"

%(self.x, self.y)

c1 = coordinate(

-100,-

200)

c2 = coordinate(

200,

300)

c3 = c1 + c2

print

(c3)

c4 = c1 - c2

print

(c4)

c5 = c1 * c2

print

(c5)

c6 = c1 / c2

print

(c6)

c7 = c1 // c2

print

(c7)

c8 = c1 % c2

print

(c8)

輸出:(

python高階之魔術方法詳解

目錄 1 classmethod 類名.屬性名 2 staticmethod 類名.屬性名 3 property 設定唯讀屬性,方法變屬性,別人不易篡改,呼叫 類名 屬性名 1 乙個類物件,在 init 初始化之前,還有 new 方法,這裡要重寫 new 方法,要呼叫父類的new方法程式設計客棧,且...

python高階 四 魔術方法

魔術方法 在python中,以雙下劃線開頭 雙下劃線結尾的方法我們稱之為魔術方法。例如 init 魔術方法是python內部定義好的,我們不需要去建立。1.new 方法和單例模式 new 方法 create and return a new object.建立物件時觸發class hero obje...

PHP基礎之魔術方法

public void construct public void destruct public void set string name mixed value public mixed get string name public bool isset string name public v...