學過c++的都知道我們在類中可以對運算子進行過載,以使運算子實現自己所需要的功能
自然在python中也可以實現運算子的過載
方法名 過載的操作說明 呼叫表示式
__init__ 建構函式 建立物件:class()
__del__ 析構函式 釋放物件的時候
__add__ 「+」 x + y
__or__ 「|」 x | y
__repr__ 列印,轉換 print x, `x`
__call__ 函式呼叫 x()
__getattr__ 屬性引用 x.undefined
__getitem__ 索引 x[key],for迴圈,in測試
__setitem__ 索引賦值 x[key] = value
__getslice__ 分片 x[low:high]
__len__ 長度 len(x)
__cmp__ 比較 x == y ,x < y
__radd__ 右邊的操作符"+" 非例項 + x
見下面的例子:
class example(object):
def __init__(self,x=0.0,y=0.0):
self.x = x
self.y = y
def __str__(self):
return "(%s, %s)"%(self.x, self.y)
def __add__(self,rhs):
return example(self.x + rhs.x,self.y + rhs.y)
def __sub__(self,rhs):
return example(self.x - rhs.x,self.y - rhs.y)
@classmethod
def calculate(cls,a,b):
return cls(b[0] - a[0],b[1] - a[1])
point1 = (10.0,30.0)
point2 = (25.0,50.0)
point12 = example.calculate(point1,point2)
print "point12 + (4,6) is",point12 + example(4,6)
print "point12 - (4,6) is",point12 - example(4,6)
結果如我們所想的一樣:
Python 中的運算子過載
一種運算子對於不同型別的物件,有不同的使用方式。例如,用於整型物件,表示兩個數相加 用於字串,表示連線這兩個字串。x,y 10,20print x y 30 a,b john wick print a b john wick 運算子因操作物件的型別的不同而執行不同的操作,這種特性稱為過載。運算子的功...
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 ...