日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python比较运算符重载_python运算符重载

發(fā)布時間:2023/12/1 python 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python比较运算符重载_python运算符重载 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1、打印操作會首先嘗試__str__和str內(nèi)置函數(shù),他通常返回一個用戶友好顯示。__repr__用于所有其他環(huán)境,用于交互式模式下提示回應以及repr函數(shù),如果沒有使用__str__,則會使用print和str。它通常返回一個編碼字符串,可以用來重新創(chuàng)建對象,或則給開發(fā)者一個詳細的顯示。總而言之,除了當定義一個__str__的時候,使用print和str。然而需要注意,如果沒有定義__str__,打印還是使用__repr__,反過來不成立。在交互模式下,只適用__repr__,并且根本不嘗試__str__.

2、__str__,__repr__都必須返回字符串,返回其他類型會抱錯。還有一個需要注意的是,__str__的用戶友好顯示可能只有對象出現(xiàn)在一個打印操作的頂層時候才應用,嵌套 到較大對象中 的對象 可能用其__repr__或默認方法打印。

例如:

class Printer:

def __init__(self,val):

self.val = val

def __str__(self):

return str(self.val)

obj = [Printer(2),Printer(3)]

for x in obj:

print(x) #輸出:2 3

print(obj) #輸出:[<__main__.printer object at>, <__main__.printer object at>]

但是__repr__能夠解決前面提的那個問題

class Printer:

def __init__(self,val):

self.val = val

def __repr__(self):

return str(self.val)

obj = [Printer(2),Printer(3)]

for x in obj:

print(x) #輸出:2 3

print(obj) #輸出:2,3

3、右側(cè)加法和原處加法:__radd__,__iadd__

class adder:

def __init__(self,value=0):

self.data = value

def __add__(self,,other):

self.data+=other

adder只是在+左邊是對象時使用,如果要支持右側(cè)使用實例對象,則需要重載 __radd__.

例如:

class Commuter:

def __init__(self,val):

self.val = val

def __add__(self,other):

print('add',self.val,other)

return self.val+other

def __radd__(self,other):

print('radd',self.val,other)

return other+self.val #這個 順序無所謂,只是在調(diào)用的時候很位置很重要

x = Commuter(88)

y = Commuter(99)

print(x+1)

print('#'*8)

print(1+y)

print('$'*8)

print(x+y)

#輸出結(jié)果如下:

add 88 1

89

########

radd 99 1

100

$$$$$$$$

add 88 <__main__.commuter object at>

radd 99 88

187

原處加法: __iadd__或者__add__但是__iadd__更高效

class Number:

def __init__(self,val):

self.val = val

def __iadd__(self,other):

self.val+=other

return self

x = Number(5)

x+=1

x+=1

print(x.val) #輸出:7

或者

class Number:

def __init__(self,val):

self.val = val

def __add__(self,other):

return Number(self.val+other)

4、call表達式:__call__

有關python的__call__在官方文檔上有這么一句解釋 (http://docs.python.org/reference/datamodel.html?highlight=__call__#object.__call__)

object.__call__(self[, args...])

Called when the instance is “called” as a function; if this method is defined, x(arg1, arg2, ...) is a shorthand for x.__call__(arg1, arg2, ...).

當把一個實例當作方法來調(diào)用的時候,形如instance(arg1,args2,...),那么實際上調(diào)用的就是 instance.__call__(arg1,arg2,...)

例如:

class Prod:

def __init__(self,value):

self.value = value

def __call__(self,other):

return self.value *other

x = Prod(2)

print(x(3)) #輸出:6

5、比較:__lt__,__gt__和其他方法

比較運算沒有位置限制。

比較運算沒有隱士關系,比如說 == 為真并不以為著 !=為假

python2.6中如果沒有定義更為具體的比較方法,對其使用一個__cmp__或者內(nèi)置cmp函數(shù)。

cmp( x, y)

Compare the two objects x and y and return an integer according to the outcome. The return value is negative if x < y, zero if x == y and strictly positive if x > y.

class C:

def __init__(self,data):

self.data = data

def __gt__(self,other):

return self.data > other

def __lt__(self,other):

return self.data < other

x = C('spam')

print('1',x >'ham')

print('2','ham'> x)

print('3',x < 'ham')

print('4','ham'

y = C('ham')

print('5',x

print('6',x>y)

6、布爾測試:__bool__,__len__

在布爾環(huán)境中,python首先嘗試__bool__來獲取一個直接布爾值,然后如果沒有該方法,就嘗試__len__類根據(jù)對象的長度確定 一個真值。

7、對象析構(gòu)函數(shù):__del__

每當實例產(chǎn)生時,就會調(diào)用__init__構(gòu)造函數(shù),每當 實例空間被回收時,就會執(zhí)行析構(gòu)函數(shù)。

class Life:

def __init__(self,name='unknow'):

print('hello ',name)

self.name = name

def __del__(self):

print('Goodbye',self.name)

brain = Life('Brain')#輸出 hello brain

brain = 'loretta' #輸出: Goodbye brain

總結(jié)

以上是生活随笔為你收集整理的python比较运算符重载_python运算符重载的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日本成人在线免费观看 | 日本资源在线 | 91精品在线观看视频 | 无码人妻少妇色欲av一区二区 | 好大好爽好舒服 | 亚洲精品电影在线 | 国产在线中文字幕 | 区一区二在线观看 | 毛片毛片毛片毛片毛片毛片毛片 | a免费在线观看 | www.久草.com | 色中色在线视频 | 日韩a级片 | 动漫av网站 | 极品探花在线 | 涩涩涩涩涩涩涩涩涩涩 | 狠狠操狠狠摸 | 国产精品成人一区二区网站软件 | 国产欧美在线 | 欧美另类69xxxx | av香蕉| 精品人妻少妇嫩草av无码专区 | 国产精品av在线免费观看 | 亚洲熟妇av一区二区三区 | 欧美少妇网 | 好吊妞视频在线观看 | 中文字幕一区二区三区乱码不卡 | 91国偷自产中文字幕久久 | 欧美一级欧美三级在线观看 | 国产女人被狂躁到高潮小说 | 中文字幕第20页 | 在线观看日韩视频 | 免费黄av| 国产成人自拍视频在线 | 亚日韩欧美 | 国产成人资源 | 网站色| 久久免费看| 91在线视频在线观看 | 午夜精品三级久久久有码 | 我的邻居在线观看 | 超碰人人网 | 蜜芽一区二区 | 日韩欧美国产综合 | 国产成人精品久久二区二区91 | 久久久久亚洲AV | 国产成人三级在线观看视频 | 亚洲精品aaaa | 羞羞网站在线看 | 9久9久9久女女女九九九一九 | 精品国产网 | 69xxxx日本 | 久久国产欧美日韩精品 | 亚洲一区精品视频 | 色视频一区二区 | 污污视频在线免费观看 | 国产福利小视频在线观看 | 精品国产视频一区二区三区 | 日韩av免费网址 | 五月婷婷综合激情 | 末发成年娇小性xxxxx | 四虎免费久久 | 在线观看黄色的网站 | 中文视频一区 | 裸体裸乳免费看 | 视频免费1区二区三区 | 色导航在线 | 国产美女www | 天天弄 | 密臀av在线 | 亚洲视频一区二区三区在线观看 | 成人免费黄色网址 | 天堂在线中文网 | 成人免费毛片色戒 | 求毛片网站 | 成人久久精品人妻一区二区三区 | 视频一区在线观看 | 欧美美女啪啪 | 深夜在线免费视频 | 中文久草 | 中文字幕一区二区在线观看视频 | 少妇一级淫片日本 | 色性av| 久青草资源福利视频 | 91日本在线 | 久久精品aⅴ无码中文字字幕重口 | 亚洲欧洲在线视频 | 国产视频一区二区视频 | 精品二区在线 | 欧美日韩精品一区二区三区四区 | 伊人55| 欧美日韩一区不卡 | 欧美成人a视频 | 久久久国产成人 | 亚洲免费福利 | 日韩av毛片 | 免费污片在线观看 | 东北少妇不戴套对白第一次 | 天天射寡妇射 |