Python運(yùn)算符重載用法實(shí)例分析
本文實(shí)例講述了Python運(yùn)算符重載用法。分享給大家供大家參考。具體如下:
在Python語言中提供了類似于C++的運(yùn)算符重在功能:
一下為Python運(yùn)算符重在調(diào)用的方法如下:
Method Overloads Call for
__init__ 構(gòu)造函數(shù) X=Class()
__del__ 析構(gòu)函數(shù) 對(duì)象銷毀
__add__ + X+Y,X+=Y
__or__ | X|Y,X|=Y
__repr__ 打印轉(zhuǎn)換 print X,repr(X)
__str__ 打印轉(zhuǎn)換 print X,str(X)
__call__ 調(diào)用函數(shù) X()
__getattr_ 限制 X.undefine
__setattr__ 取值 X.any=value
__getitem__ 索引 X[key],
__len__ 長度 len(X)
__cmp__ 比較 X==Y,X<Y
__lt__ 小于 X<Y
__eq__ 等于 X=Y
__radd__ Right-Side + +X
__iadd__ += X+=Y
__iter__ 迭代 For In
1. 減法重載
class Number:
def __init__(self, start):
self.data = start
def __sub__(self, other): #minus method
return Number(self.data - other)
number = Number(20)
y = number – 10 # invoke __sub__ method
class Number:
def __init__(self, start):
self.data = start
def __sub__(self, other): #minus method
return Number(self.data - other)
number = Number(20)
y = number – 10 # invoke __sub__ method
2. 迭代重載
class indexer:
def __getitem__(self, index): #iter override
return index ** 2
X = indexer()
X[2]
for i in range(5):
print X[i]
class indexer:
def __getitem__(self, index): #iter override
return index ** 2
X = indexer()
X[2]
for i in range(5):
print X[i]
3. 索引重載
class stepper:
def __getitem__(self, i):
return self.data[i]
X = stepper()
X.data = 'Spam'
X[1] #call __getitem__
for item in X: #call __getitem__
print item
class stepper:
def __getitem__(self, i):
return self.data[i]
X = stepper()
X.data = 'Spam'
X[1] #call __getitem__
for item in X: #call __getitem__
print item
4. getAttr/setAttr重載
class empty:
def __getattr__(self,attrname):
if attrname == 'age':
return 40
else:
raise AttributeError,attrname
X = empty()
print X.age #call__getattr__
class accesscontrol:
def __setattr__(self, attr, value):
if attr == 'age':
# Self.attrname = value loops!
self.__dict__[attr] = value
else:
print attr
raise AttributeError, attr + 'not allowed'
X = accesscontrol()
X.age = 40 #call __setattr__
X.name = 'wang' #raise exception
class empty:
def __getattr__(self,attrname):
if attrname == 'age':
return 40
else:
raise AttributeError,attrname
X = empty()
print X.age #call__getattr__
class accesscontrol:
def __setattr__(self, attr, value):
if attr == 'age':
# Self.attrname = value loops!
self.__dict__[attr] = value
else:
print attr
raise AttributeError, attr + 'not allowed'
X = accesscontrol()
X.age = 40 #call __setattr__
X.name = 'wang' #raise exception
5. 打印重載
class adder:
def __init__(self, value=0):
self.data = value
def __add__(self, other):
self.data += other
class addrepr(adder):
def __repr__(self):
return 'addrepr(%s)' % self.data
x = addrepr(2) #run __init__
x + 1 #run __add__
print x #run __repr__
class adder:
def __init__(self, value=0):
self.data = value
def __add__(self, other):
self.data += other
class addrepr(adder):
def __repr__(self):
return 'addrepr(%s)' % self.data
x = addrepr(2) #run __init__
x + 1 #run __add__
print x #run __repr__
6. Call調(diào)用函數(shù)重載
class Prod:
def __init__(self, value):
self.value = value
def __call__(self, other):
return self.value * other
p = Prod(2) #call __init__
print p(1) #call __call__
print p(2)
class Prod:
def __init__(self, value):
self.value = value
def __call__(self, other):
return self.value * other
p = Prod(2) #call __init__
print p(1) #call __call__
print p(2)
7. 析構(gòu)函數(shù)重載
class Life:
def __init__(self, name='name'):
print 'Hello', name
self.name = name
def __del__(self):
print 'Goodby', self.name
brain = Life('Brain') #call __init__
brain = 'loretta' # call __del__
希望本文所述對(duì)大家的Python程序設(shè)計(jì)有所幫助。
相關(guān)文章
python的import?機(jī)制是怎么實(shí)現(xiàn)的
這篇文章主要介紹了python的import?機(jī)制是怎么實(shí)現(xiàn)的,import有Python運(yùn)行時(shí)的全局模塊池的維護(hù)和搜索、解析與搜索模塊路徑的樹狀結(jié)構(gòu)等作用,下文具體相關(guān)介紹需要的小伙伴可以參考一下2022-05-05
超級(jí)實(shí)用的8個(gè)Python列表技巧
這篇文章主要介紹了實(shí)用的8個(gè)Python列表技巧,幫助大家更好的理解和學(xué)習(xí)python列表的知識(shí),感興趣的朋友可以了解下2020-08-08
pytorch中backward()方法如何自動(dòng)求梯度
這篇文章主要介紹了pytorch中backward()方法如何自動(dòng)求梯度問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02
flask + pymysql操作Mysql數(shù)據(jù)庫的實(shí)例
下面小編就為大家?guī)硪黄猣lask + pymysql操作Mysql數(shù)據(jù)庫的實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-11-11
python計(jì)算無向圖節(jié)點(diǎn)度的實(shí)例代碼
今天小編就為大家分享一篇python計(jì)算無向圖節(jié)點(diǎn)度的實(shí)例代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-11-11
Python Flask 請(qǐng)求數(shù)據(jù)獲取響應(yīng)詳解
這篇文章主要介紹了Python Flask請(qǐng)求數(shù)據(jù)獲取響應(yīng)的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-10-10

