Python的魔術方法(魔法方法)(二)

2021-10-03 06:39:42 字數 3784 閱讀 8274

本篇介紹運算相關算術運算子型別轉換的相關魔法方法。

class

person

:def

__init__

(self, name, age)

: self.name = name

self.age = age

per1 = person(

'豬八戒',18

)per2 = person(

'豬八戒',18

)per3 = person(

'孫悟空',20

)

以上述**為例,我們用person類建立了三個例項物件:per1per2per3

當我們想看看這些是不是同乙個物件,這時候我們會用到==運算子。

如下面的**:

print

(per1 == per2)

# false

print

(per1 == per3)

# false

print

(per2 == per3)

# false

很明顯,這三個物件分別指向不同的記憶體位址。

實際上,在對例項進行==運算子時,python會自動呼叫__eq__方法,預設為比較兩個物件的記憶體位址。

而實際上,我們的需求可能是當nameage分別對應相等時,就返回true,否則返回false,我們可以通過對類的__eq__方法進行重寫來實現我們的需求。

class

person

:def

__init__

(self, name, age)

: self.name = name

self.age = age

def__eq__

(self, other)

:return self.name == other.name and self.age == other.age

per1 = person(

'豬八戒',18

)per2 = person(

'豬八戒',18

)per3 = person(

'孫悟空',20

)# 此時,對per1和per2的比較返回值就是true了。

print

(per1 == per2)

# true

print

(per1 == per3)

# false

同理,當我們對例項間進行不同的比較時,會預設呼叫以下方法:

比較運算子

呼叫的方法

per1 == per2

__eq__

per1 != per2

__ne__

per1 > per2

__gt__

per1 < per2

__lt__

per1 >= per2

__ge__

per1 <= per2

__le__

其實,在沒有對__ne__方法進行重寫前,__ne__方法預設結果為對__eq__結果取反。當然,如果您已經對__ne__方法進行重寫,會直接呼叫您重寫的__ne__方法。

class

person

:def

__init__

(self, name, height)

: self.name = name

self.age = height

per1 = person(

'豬八戒'

,175

)print

(per1 +

2)

對於上述第8行**,在程式執行時將會報錯,因為此時程式會直接呼叫__add__方法。

假設我們的實際需求是增加例項的身高,我們可以通過對__add__方法進行重寫來實現我們的需求。

class

person

:def

__init__

(self, name, height)

: self.name = name

self.height = height

def__add__

(self, other)

:return self.height + other

per1 = person(

'豬八戒'

,175

)print

(per1 +2)

# 177

通過對__add__方法的重寫,實現對例項直接使用+運算子,直接對例項的age屬性加。

同樣的,還有-,*,/,%,&&。以下是各運算子對應的方法:

算術運演算法

對應的方法

+__add__

-__sub__

*__mul__

/__truediv__

%__mod__

**__pow__

class

person

:def

__init__

(self, name, height)

: self.name = name

self.age = height

per1 = person(

'豬八戒'

,175

)print

(str

(per1)

)

在前一篇文章已經分享過,當直接將例項物件轉換為字串型別,會預設呼叫__str__方法。

但是如果是直接轉為intfloat或是bool型別,系統會直接報錯。

我們可以根據我們的需求重寫方法。

一下是對應呼叫的方法:

型別轉換

對應的方法

int__int__

float__float__

str__str__

bool__bool__

類的內建方法(魔法方法)

凡是在類內部定義,以 開頭 結尾的方法都是類的的內建方法,也稱為魔法方法 類的內建方法,會在某種條件滿足下自動觸發 在呼叫類時自動觸發 在 init 觸發前自動觸發,呼叫該類是,內部會通過 new 產生乙個新的物件 class demo 在 init 觸發前自動觸發 def new cls,args...

Python魔法方法 基本的魔法方法

new cls 1.new 是在乙個物件例項化時候所呼叫的第乙個方法 2.他的第乙個引數是這個類,其他的引數是用來直接傳遞給 init 方法 3.new 決定是否使用該 init 方法,因為.new 可以直接呼叫其他類的構造方法,或者返回別的例項物件來作為本類的例項,如果 new 沒有返回例項物件,...

python 魔法方法

魔法方法具有一定的特徵 new cls class capstr str def new cls,string 修改新類裡的new方法,需傳入乙個引數 string string.upper return str.new cls,string 用父類裡的new方法進行返回,直接飯後構造後的物件def...