国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

Python中類的運(yùn)算符重載

2019-11-14 17:03:58
字體:
供稿:網(wǎng)友

這篇文章僅僅是總結(jié)性質(zhì)的,待以后有時(shí)間的時(shí)候會(huì)針對比較難理解的部分補(bǔ)充一些例子。

構(gòu)造和析構(gòu)

__init__
__del__

函數(shù)調(diào)用

__call__

打印操作

__str__
__rePR__
str(x), print(X):會(huì)先嘗試__str__方法,然后嘗試__repr__方法;repr(X)或交互模式下輸入X,只會(huì)嘗試__repr__方法。

屬性操作

__getattr__:只有類中沒有定義的屬性點(diǎn)號運(yùn)算才會(huì)嘗試該方法
__setattr__:類中所有屬性的賦值語句都會(huì)嘗試該方法,self.attr=val會(huì)變成self.setattr('attr',val)
__delattr__
__getattribute__:類中所有屬性的點(diǎn)號運(yùn)算都會(huì)嘗試該方法

索引與分片

__getitem__
__setitem__
__delitem__

迭代環(huán)境

__iter__
__next__
在所有的迭代環(huán)境中,會(huì)先嘗試__iter__方法,然后在嘗試__getitem__方法,但是注意迭代器根本沒有重載索引表達(dá)式,所以如果需要通過while來根據(jù)下標(biāo)手工迭代,那么需要定義__getitem__方法。

成員測試

__contains__
in成員測試會(huì)先嘗試__contains__方法,然后是__iter__方法,最后是__getitem__方法。

描述符屬性

__get__
__set__
delete
主要這里是__delete__,也析構(gòu)函數(shù)__del__是完全不同的。

比較大小

__lt__
__le__
__gt__
__ge__
__eq__: !=和==都會(huì)嘗試該方法,所以需要確保兩個(gè)運(yùn)算符都正確地作用。
請看下面的實(shí)例:

class X:    def __init__(self, value):        self.data = value    def __eq__(self, value):        return  self.data == valuex = X(4)print(x ==5)print(x != 5)

結(jié)果為

FalseTrue

數(shù)學(xué)運(yùn)算操作

__add__, __iadd__, __radd__
__sub__, __isub__, __rsub__
__mul__, __imul__:乘法
__neg__, __pos__:表示-obj, +obj
__abs__
__floordiv__, __ifloordiv__, __truediv__, __itruediv__
__mod__, __imod__, __imod__
__pow__, __ipow__
a += b會(huì)嘗試增強(qiáng)加法__iadd__,然后嘗試普通加法__add__
x = b + obj:如果b不是類實(shí)例時(shí),會(huì)調(diào)用右側(cè)加法__radd__
當(dāng)我們把兩個(gè)實(shí)例相加的時(shí)候,Python運(yùn)行__add__,它反過來通過簡化左邊的運(yùn)算數(shù)來觸發(fā)__radd__

對象運(yùn)算操作

__concat__:比如序列a,b的加法a+b
__iconcat__

位運(yùn)算符

__and__, __iand__
__or__, __ior__, __xor__, __ixor__
__inv__, __invert__ : ~obj
__lshift__, __ilshift__, __rshift__, __irshift__
a &=b:會(huì)先嘗試__iand__,然后嘗試__add__

布爾測試

__bool__
__len__
布爾測試會(huì)先嘗試一個(gè)特定的__bool__方法,然后在嘗試__len__方法。在Python2.6中使用的名稱不是__bool__,而是__nonzero__

環(huán)境管理

主要是用于with語句的上下文管理。
__enter__
__exit__

用來定義類

__new__
這個(gè)函數(shù)會(huì)在類初始化函數(shù)__init__()之前調(diào)用

整數(shù)值

__index__
如果在bin(X), hex(X), oct(X), O[X], O[X:]等需要傳入一個(gè)數(shù)字、索引、分片的值時(shí)傳入一個(gè)對象,那么該對象的__index__會(huì)被調(diào)用。
主要是用來替代Python2.x中的__oct____hex__


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 武城县| 邵东县| 赤水市| 甘谷县| 惠安县| 文成县| 南靖县| 武乡县| 宁阳县| 威信县| 淮安市| 常山县| 弋阳县| 利川市| 建宁县| 潞城市| 阿勒泰市| 迁安市| 富宁县| 开化县| 小金县| 桦川县| 云龙县| 清苑县| 綦江县| 靖江市| 淮北市| 扶沟县| 化州市| 仁怀市| 潮州市| 莱阳市| 长汀县| 瑞丽市| 白山市| 林周县| 道孚县| 紫金县| 岐山县| 孟连| 娱乐|