python運算子過載

2021-08-28 23:17:28 字數 2178 閱讀 5966

python的運算子過載可以算是語言的一大特色了。相比c#,python進行運算子過載將會方便許多,只需要重寫以__開頭和結尾的特殊方法即可,下面看乙個簡單的例子:

# 迭代器

class indexer(object):

value = 1

# 加法運算過載

def __add__(self, value):

return self.value + value

indexer = indexer()

print(indexer + 3)

列印結果為4,可以看出來對indexer物件使用+運算子執行的是我們定義在__add__ 中的邏輯。其它的運算子過載也遵照這一方法。

method

overload call

__init__

建構函式 物件建立: x = class(args)

__del__

析構函式 x物件收回

__add__

運算子+ 如果沒有_iadd_, x+y, x+=y

__or__

運算子__repr__, __str__

列印,轉換 print(x),repr(x),str(x)

__call__

函式呼叫 x(*args, **kwargs)

__getattr__

點號運算 x.undefined

__setattr__

屬性賦值語句 x.any=value

__delattr__

屬性刪除 del x.any

__getattribute__

屬性獲取 x.any

__getitem__

索引運算 x[key],x[i:j]

__setitem__

索引賦值語句 x[key],x[i:j]=sequence

__delitem__

索引和分片刪除 del x[key],del x[i:j]

__len__

長度 len(x),如果沒有__bool__,真值測試

__bool__

布林測試 bool(x)

__lt__, __gt__, __le__, __ge__, __eq__, __ne__

特定的比較 xy,x<=y,x>=y, x==y,x!=y

__radd__

右側加法 other+x

__iadd__

實地(增強的)加法 x+=y(or elseadd)

__iter__, __next__

迭代環境 i=iter(x), next()

__contains__

成員關係測試 item in x(任何可迭代)

__index__

整數值 hex(x), bin(x), oct(x)

__enter__, __exit__

環境管理器 with obj as var:

__get__, __set__, __delete__

描述符屬性 x.attr, x.attr=value, del x.attr

__new__

建立 在__init__之前建立物件

paython3.0中迭代器需要實現的迭代方法變更為了__next__而不是2.x版本的next

# 迭代器

class myiterator(object):

self.offset = 0

def __next__(self):

# 如果超出迭代範圍直接丟擲異常

raise stopiteration('stop')

self.offset += 1

return item

class indexer(object):

data = [1, 2, 3, 4, 5, 6, 7]

# 迭代器重載

def __iter__(self):

return myiterator(self.data)

indexer = indexer()

for x in indexer:

print(x)

測試

123

4567

[finished in 0.2s]

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 運算子過載

運算子過載就是讓用類寫成的物件,可截獲並響應用在內建型別上的運算 加法,切片,列印和點號運算等 1.以雙下劃線命名的方法 x 的特殊鉤子,python運算子過載的實現是提供特殊命名的方法來攔截運算,python替每種運算和特殊命名的方法之間,定義了固定不變的對映關係 2.當例項出現在內建運算時,這類...