#運算子過載就是讓用類寫成的物件,可截獲並響應用在內建型別上的運算:加法,切片,列印和點號運算等
#1. 以雙下劃線命名的方法(__x__)的特殊鉤子,python運算子過載的實現是提供特殊命名的方法來攔截運算,python替每種運算和特殊命名的方法之間,定義了固定不變的對映關係
#2. 當例項出現在內建運算時,這類方法會自動呼叫,例如,如果例項物件繼承了__add__方法,當物件出現+表示式內時,該方法就會呼叫,該方法的返回值會程式設計相應表示式的結果
#3. 類可覆蓋多數內建型別運算
#4. 運算子覆蓋方法沒有預設值,而且也不需要,如果類沒有定義或者繼承運算子過載方法,就是說相應的運算在類例項中不支援,例如:如果沒有__add__,+表示式就會引發異常
#5. 運算子可讓類與python的物件模型相整合,過載型別運算時,以類實現的使用者定義物件的行為就會像內建物件一樣,因此,提供了一致性,以及與預期介面的相容性
#運算子過載只意味著在類方法中攔截內建的操作——當類的例項出現在內建操作中,python自動呼叫你的方法,並且你的方法的返回值變成了相關操作的結果
#運算子過載讓類攔截常規的python運算子
#類可過載所有python表示式運算子
#類可過載列印,函式呼叫,屬性點號運算等內建運算
#過載使類例項的行為像內建型別
#過載是通過提供特殊名稱的類方法來實現的
#所有過載方法的名稱前後都有兩個下劃線字元
#多數過載方法只用在需要物件行為表現的像內建型別一樣的高階程式中
class firstclass:
def setdata(self, value):
self.data=value
def display(self):
print(self.data)
class secondclass(firstclass):
def display(self): #重寫display方法
print('current value="%s"'%self.data)
class thirdclass(secondclass):
def __init__(self,value):
self.data=value
def __add__(self, other): #過載加法
return thirdclass(self.data+other)
def __str__(self): #print列印乙個物件時,執行__str__
return '[thirdclass:%s]'%self.data
def mul(self,other):
self.data*=other
a=thirdclass('abc')
a.display() #current value="abc"
print(a) #[thirdclass:abc] 呼叫__str__
a=a+'xyz'
a.display() #current value="abcxyz"
print(a) #[thirdclass:abcxyz]
a.mul(3)
a.display() #current value="abcxyzabcxyzabcxyz"
print(a) #[thirdclass:abcxyzabcxyzabcxyz]
Python 運算子過載
在 python 中is 是兩個運算子,對物件進行比較,分別對id,type value 進行比較。is 比較id type value三維 而 僅 比較value。實驗發現其實is,僅僅是比較一些簡單的基礎變數。class test object def init self self.value ...
Python運算子過載
print 呼叫父類建構函式 def parentmethod self print 呼叫父類方法 def setattr self,attr self.parentattr attr def getattr self print 父類屬性 self.parentattr def del self ...
python運算子過載
python的運算子過載可以算是語言的一大特色了。相比c python進行運算子過載將會方便許多,只需要重寫以 開頭和結尾的特殊方法即可,下面看乙個簡單的例子 迭代器 class indexer object value 1 加法運算過載 def add self,value return self...