本篇介紹運算相關,算術運算子和型別轉換的相關魔法方法。
class
person
:def
__init__
(self, name, age)
: self.name = name
self.age = age
per1 = person(
'豬八戒',18
)per2 = person(
'豬八戒',18
)per3 = person(
'孫悟空',20
)
以上述**為例,我們用person類建立了三個例項物件:per1
、per2
、per3
。
當我們想看看這些是不是同乙個物件,這時候我們會用到==
運算子。
如下面的**:
print
(per1 == per2)
# false
print
(per1 == per3)
# false
print
(per2 == per3)
# false
很明顯,這三個物件分別指向不同的記憶體位址。
實際上,在對例項進行==
運算子時,python會自動呼叫__eq__
方法,預設為比較兩個物件的記憶體位址。
而實際上,我們的需求可能是當name
和age
分別對應相等時,就返回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__
方法。
但是如果是直接轉為int
或float
或是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...