一元運算子有+,-,~等,要想使這些一元運算子對物件起作用,需要在定義類的時候實現對應的魔術方法。
定義乙個座標類
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...