• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Benjamin

            靜以修身,儉以養(yǎng)德,非澹薄無以明志,非寧靜無以致遠(yuǎn)。
            隨筆 - 398, 文章 - 0, 評論 - 196, 引用 - 0
            數(shù)據(jù)加載中……

            常用Magic Methods魔數(shù)方法說明

            構(gòu)造與初始化
            __new__(cls, [...)                類的初始化過程中第一個(gè)被執(zhí)行的方法。
            __init__(self, [...)                類的構(gòu)造器,必須返回對象
            __del__(self)                    析構(gòu)函數(shù)。它定義了一個(gè)被垃圾回收的行為。它在類消除的時(shí)后需要做一些額外的行為時(shí)是非常有用 __del__很少被使用,因?yàn)樗恼{(diào)用是非常不穩(wěn)定的;請謹(jǐn)慎使用!
            __metaclass__    定義當(dāng)前類的元類
            __class__         查看對象所屬的類
            __base__ 獲取當(dāng)前類的父類
            __bases__ 獲取當(dāng)前類的所有父類

            類中的操作
            比較方法
            __cmp__(self, other)  實(shí)現(xiàn)了所有的比較運(yùn)算符(如<, ==, !=)的行為,當(dāng)self < other時(shí)__cmp__應(yīng)該返回一個(gè)負(fù)整數(shù),當(dāng)self == other時(shí)返回0,self > other時(shí)返回正整數(shù)。python3被刪除
            __eq__(self, other)      定義相等符號的行為,==
            __ne__(self,other)      定義不等符號的行為,!=
            __lt__(self,other)      定義小于符號的行為,<
            __gt__(self,other)     定義大于符號的行為,>
            __le__(self,other)    定義小于等于符號的行為,<=
            __ge__(self,other)   定義大于等于符號的行為,>=
            數(shù)值魔術(shù)方法
            _pos__(self)      實(shí)現(xiàn)一個(gè)取正數(shù)的操作(比如 +some_object ,python調(diào)用__pos__函數(shù))
            __neg__(self)    實(shí)現(xiàn)一個(gè)取負(fù)數(shù)的操作(比如 -some_object )
            __abs__(self)    實(shí)現(xiàn)一個(gè)內(nèi)建的abs()函數(shù)的行為
            __invert__(self) 實(shí)現(xiàn)一個(gè)取反操作符(~操作符)的行為。想要了解這個(gè)操作的解釋,參考the Wikipedia article on bitwise operations.
            __round__(self, n) 實(shí)現(xiàn)一個(gè)內(nèi)建的round()函數(shù)的行為。 n 是待取整的十進(jìn)制數(shù).
            __floor__(self)  實(shí)現(xiàn)math.floor()的函數(shù)行為,比如, 把數(shù)字下取整到最近的整數(shù).
            __ceil__(self)    實(shí)現(xiàn)math.ceil()的函數(shù)行為,比如, 把數(shù)字上取整到最近的整數(shù).
            __trunc__(self)     實(shí)現(xiàn)math.trunc()的函數(shù)行為,比如, 把數(shù)字截?cái)喽玫秸麛?shù).
            算數(shù)運(yùn)算
            __add__(self, other) 實(shí)現(xiàn)一個(gè)加法.
            __sub__(self, other) 實(shí)現(xiàn)一個(gè)減法.
            __mul__(self, other) 實(shí)現(xiàn)一個(gè)乘法.
            __floordiv__(self, other) 實(shí)現(xiàn)一個(gè)“//”操作符產(chǎn)生的整除操作()
            __div__(self, other) 實(shí)現(xiàn)一個(gè)“/”操作符代表的除法操作.
            __truediv__(self, other) 實(shí)現(xiàn)真實(shí)除法,注意,只有當(dāng)from __future__ import division時(shí)才會(huì)有效
            __mod__(self, other) 實(shí)現(xiàn)一個(gè)“%”操作符代表的取模操作.
            __divmod__(self, other) 實(shí)現(xiàn)一個(gè)內(nèi)建函數(shù)divmod()
            __pow__  實(shí)現(xiàn)一個(gè)指數(shù)操作(“**”操作符)的行為
            __lshift__(self, other) 實(shí)現(xiàn)一個(gè)位左移操作(<<)的功能
            __rshift__(self, other) 實(shí)現(xiàn)一個(gè)位右移操作(>>)的功能.
            __and__(self, other) 實(shí)現(xiàn)一個(gè)按位進(jìn)行與操作(&)的行為.
            __or__(self, other) 實(shí)現(xiàn)一個(gè)按位進(jìn)行或操作(|)的行為.
            __xor__(self, other) 實(shí)現(xiàn)一個(gè)異或操作(^)的行為

            反射算術(shù)運(yùn)算符
            所有的魔法方法做的事情與正常運(yùn)算表示的意義是等價(jià)的。注意,下面參數(shù)othe必須保證該對像沒有定義(或者返回NotImplemented的)它的非反射運(yùn)算符。例如,在這個(gè)例子中,some_object.__radd__  只有在 other沒有定義__add__的時(shí)候才會(huì)被調(diào)用。
            __radd__(self, other) 反射加法
            __rsub__(self, other) 反射減法的
            __rmul__(self, other) 反射除法
            __rfloordiv__(self, other) 反射地板除,使用//運(yùn)算符的
            __rdiv__(self, other) 反射除法,使用/運(yùn)算符的.
            __rtruediv__(self, other) 反射真除.注意只有from __future__ import division 的時(shí)候它才有效
            __rmod__(self, other) 反射取模運(yùn)算,使用%運(yùn)算符.
            __rdivmod__(self, other) 長除法,使用divmod()內(nèi)置函數(shù),當(dāng)divmod(other,self)時(shí)被調(diào)用.
            __rpow__ 反射乘方,使用**運(yùn)算符的
            __rlshift__(self, other) 反射左移,使用<<操作符.
            __rrshift__(self, other) 反射右移,使用>>操作符.
            __rand__(self, other) 反射位與,使用&操作符.
            __ror__(self, other) 反射位或,使用|操作符.
            __rxor__(self, other) 反射異或,使用^操作符.
            增量運(yùn)算
            __iadd__(self, other) 加法賦值
            __isub__(self, other) 減法賦值.
            __imul__(self, other) 乘法賦值
            __ifloordiv__(self, other) 整除賦值,地板除,相當(dāng)于 //= 運(yùn)算符.
            __idiv__(self, other) 除法賦值,相當(dāng)于 /= 運(yùn)算符. python3中不存在
            __itruediv__(self, other) 真除賦值,注意只有 whenfrom __future__ import divisionis,才有效.
            __imod_(self, other) 模賦值,相當(dāng)于 %= 運(yùn)算符.
            __ipow__ 乘方賦值,相當(dāng)于 **= 運(yùn)算符.
            __ilshift__(self, other) 左移賦值,相當(dāng)于 <<= 運(yùn)算符.
            __irshift__(self, other) 左移賦值,相當(dāng)于 >>= 運(yùn)算符.
            __iand__(self, other) 與賦值,相當(dāng)于 &= 運(yùn)算符.
            __ior__(self, other) 或賦值,相當(dāng)于 |= 運(yùn)算符.
            __ixor__(self, other) 異或運(yùn)算符,相當(dāng)于 ^= 運(yùn)算符.
            類型轉(zhuǎn)換魔法
            __int__(self) 轉(zhuǎn)換成整型.
            __long__(self) 轉(zhuǎn)換成長整型.
            __float__(self) 轉(zhuǎn)換成浮點(diǎn)型.
            __complex__(self) 轉(zhuǎn)換成 復(fù)數(shù)型.
            __oct__(self) 轉(zhuǎn)換成八進(jìn)制.
            __hex__(self) 轉(zhuǎn)換成十六進(jìn)制.
            __index__(self) 當(dāng)對象被切片時(shí)轉(zhuǎn)換成int型。如果定義了一個(gè)可能被用來做切片操作的數(shù)值型,就應(yīng)該定義__index__.
            __trunc__(self) 當(dāng) math.trunc(self) 使用時(shí)被調(diào)用.__trunc__返回自身類型的整型截取 (通常是一個(gè)長整型).
            __coerce__(self, other) 執(zhí)行混合類型的運(yùn)算,如果轉(zhuǎn)換不能完成,應(yīng)該返回None;否則,要返回一對兩個(gè)元數(shù)的元組self和other, 被操作成同類型。python3被廢棄
            表示類
            __str__(self)  定義當(dāng) str() 被一個(gè)類的實(shí)例調(diào)用時(shí)所要產(chǎn)生的行為。
            __repr__(self) 定義 當(dāng) repr()  被一個(gè)類的實(shí)例調(diào)用時(shí)所要產(chǎn)生的行為。 str() 和 repr() 的主要區(qū)別是其目標(biāo)群體。 repr() 返回的是機(jī)器可讀的輸出,而 str() 返回的是人類可讀的。
            __unicode__(self)  unicode() 和 str() 很相似,但是返回的是unicode字符串。python3這個(gè)方法已經(jīng)不存在了,并且__bytes__(它的行為與__str__和__unicode__類似)成為新的自帶方法來構(gòu)造byte數(shù)組
            __format__(self, formatstr) 定義當(dāng)一個(gè)類的實(shí)例被用來用新式的格式化字符串方法進(jìn)行格式化時(shí)所要產(chǎn)生的行為。
            __hash__(self)  定義當(dāng) hash()被一個(gè)類的實(shí)例調(diào)用時(shí)所要產(chǎn)生的行為。它返回一個(gè)整數(shù),用來在字典中進(jìn)行快速比較。請注意,這通常也承擔(dān)著實(shí)現(xiàn)__eq__。有下面這樣的規(guī)則:a == b 暗示著 hash(a) == hash(b) 。
            __nonzero__(self)  定義當(dāng) bool() 被一個(gè)類的實(shí)例調(diào)用時(shí)所要產(chǎn)生的行為。本方法應(yīng)該返回True或者False。python3被命名為bool
            __dir__(self) 定義當(dāng) dir() 被一個(gè)類的實(shí)例調(diào)用時(shí)所要產(chǎn)生的行為。該方法應(yīng)該返回一個(gè)屬性的列表給用戶,如果重新定義了__getattr__或__getattribute__或者其它的動(dòng)態(tài)生成屬性,那么它對類的交互使用是至關(guān)重要的。
            __sizeof__(self) 定義當(dāng) sys.getsizeof() 被一個(gè)類的實(shí)例調(diào)用時(shí)所要產(chǎn)生的行為。該方法應(yīng)該以字節(jié)為單位,返回對象的大小。
            屬性訪問控制
            __getattr__(self, name) 定義如何處理用戶試圖訪問一個(gè)不存在(不存在或還沒創(chuàng)建)屬性的行為。這對于捕獲或者重定向一般的拼寫錯(cuò)誤非常有用,給出訪問了不能訪問的屬性的警告(如果愿意,還可以推斷并返回那個(gè)屬性。),或者巧妙地處理一個(gè)AttributeError異常。
            __setattr__(self, name, value)  與__getattr__不同,__setattr__是一個(gè)真正的封裝方案。它允許定義當(dāng)給一個(gè)存在或不存在的屬性賦值時(shí)的行為,意味著對任何屬性值的改變都可以定義一個(gè)規(guī)則。
            __delattr__ 它與__setattr__非常像, 只不過是用來刪除而不是設(shè)置屬性。 __detattr__需要預(yù)防措施,就像setattr一樣,當(dāng)被調(diào)用時(shí)可能會(huì)引起無限遞歸(當(dāng)__delattr__已經(jīng)實(shí)現(xiàn)時(shí),調(diào)用 del self.name 就會(huì)引起無限的遞歸)。
            __getattribute__(self, name)  只有在新風(fēng)格的類中才會(huì)被使用(所有的新風(fēng)格類在Python最新的版本中,在老版本中,可以子類化object來獲得一個(gè)新風(fēng)格類。它允許定義一條規(guī)則來處理無論什么時(shí)候?qū)傩灾当辉L問時(shí)的行為。比如類似于由于其它的伙伴犯錯(cuò)而引起的無限遞歸(這時(shí)就可以調(diào)用基類的__getattribute__方法來阻止它)。它也避免了對__getattr__的依賴,當(dāng)__getattribute__方法已經(jīng)實(shí)現(xiàn)的時(shí)候,__getattr__只有在__getattribute__被明確的調(diào)用或拋出一個(gè)AttributeError異常的時(shí)候才會(huì)被調(diào)用。,不常用。

            容器相關(guān)
            __len__(self) 返回容器的長度。對于可變和不可變?nèi)萜鞯膮f(xié)議,這都是其中的一部分。
            __getitem__(self, key) 定義當(dāng)某一項(xiàng)被訪問時(shí),使用self[key]所產(chǎn)生的行為。這也是不可變?nèi)萜骱涂勺內(nèi)萜鲄f(xié)議的一部分。如果鍵的類型錯(cuò)誤將產(chǎn)生TypeError;如果key沒有合適的值則產(chǎn)生KeyError。
            __setitem__(self, key, value) 定義當(dāng)一個(gè)條目被賦值時(shí),使用self[nkey] = value所產(chǎn)生的行為。這也是協(xié)議的一部分。而且,在相應(yīng)的情形下也會(huì)產(chǎn)生KeyError和TypeError。
            __delitem__(self, key) 定義當(dāng)某一項(xiàng)被刪除時(shí)所產(chǎn)生的行為。(例如del self[key])。這只是可變?nèi)萜鲄f(xié)議的一部分。當(dāng)使用一個(gè)無效的鍵時(shí)必須拋出適當(dāng)?shù)漠惓!?br />__iter__(self) 返回一個(gè)容器迭代器,很多情況下會(huì)返回迭代器,尤其是當(dāng)內(nèi)置的iter()方法被調(diào)用的時(shí)候,以及當(dāng)使用for x in container:方式循環(huán)的時(shí)候。迭代器是它們本身的對象,它們必須定義返回self的__iter__方法。
            __reversed__(self) 實(shí)現(xiàn)當(dāng)reversed()被調(diào)用時(shí)的行為。應(yīng)該返回序列反轉(zhuǎn)后的版本。僅當(dāng)序列可以是有序的時(shí)候?qū)崿F(xiàn)它,例如對于列表或者元組。
            __contains__(self, item) 定義了調(diào)用in和not in來測試成員是否存在的時(shí)候所產(chǎn)生的行為。可能會(huì)問為什么這個(gè)不是序列協(xié)議的一部分?因?yàn)楫?dāng)__contains__沒有被定義的時(shí)候,Python會(huì)迭代這個(gè)序列,并且當(dāng)找到需要的值時(shí)會(huì)返回True。
            __missing__(self, key) 其在dict的子類中被使用。它定義了當(dāng)一個(gè)不存在字典中的鍵被訪問時(shí)所產(chǎn)生的行為。(例如,如果我有一個(gè)字典d,當(dāng)"george"不是字典中的key時(shí),使用了d["george"],此時(shí)d["george"]將會(huì)被調(diào)用)。

            反射
            __instancecheck__(self, instance) 檢查對象是否是您定義的類的一個(gè)實(shí)例(例.isinstance(instance, class).
            __subclasscheck__(self, subclass) 檢查類是否是定義類的子類 (例.issubclass(subclass, class)).
            可調(diào)用對象
            __call__(self, [args...]) 允許一個(gè)類的實(shí)例像函數(shù)一樣被調(diào)用 在那些類的實(shí)例經(jīng)常改變狀態(tài)的時(shí)候會(huì)非常有效。“調(diào)用”這個(gè)實(shí)例是一種改變這個(gè)對象狀態(tài)的直接和優(yōu)雅的做法。

            會(huì)話管理器 包裝一個(gè)with語句來設(shè)置和清理相應(yīng)對象的行為
            __enter__(self) 定義了當(dāng)使用with語句的時(shí)候,會(huì)話管理器在塊被初始創(chuàng)建事要產(chǎn)生的行為。請注意,__enter__的返回值與with語句的目標(biāo)或者as后的名字綁定。
            __exit__(self, exception_type, exception_value, traceback)定義了當(dāng)一個(gè)代碼塊被執(zhí)行或者終止后,會(huì)話管理器應(yīng)該做什么。它可以被用來處理異常、執(zhí)行清理工作或做一些代碼塊執(zhí)行完畢之后的日常工作。如果代碼塊執(zhí)行成功,exception_type,exception_value,和traceback將會(huì)為None。否則,可以選擇處理這個(gè)異常或者是直接交給用戶處理。如果想處理這個(gè)異常的話,請確保__exit__在所有語句結(jié)束之后返回True。如果想讓異常被會(huì)話管理器處理的話,那么就讓其產(chǎn)生該異常

            創(chuàng)建描述器對象
            __get__(self, instance, owner) 定義了當(dāng)描述器的值被取得的時(shí)候的行為。instance是擁有該描述器對象的一個(gè)實(shí)例。owner是擁有者本身。
            __set__(self, instance, value) 定義了當(dāng)描述器的值被改變的時(shí)候的行為。instance是擁有該描述器類的一個(gè)實(shí)例。value是要設(shè)置的值。
            __delete__(self, instance) 定義了當(dāng)描述器的值被刪除的時(shí)候的行為。instance是擁有該描述器對象的一個(gè)實(shí)例。
            復(fù)制
            __copy__(self) copy.copy()返回了對象的一個(gè)淺拷貝——這意味著,當(dāng)實(shí)例本身是一個(gè)新實(shí)例時(shí),它的所有數(shù)據(jù)都被引用, 因此,對于淺拷貝中數(shù)據(jù)的更改仍然可能導(dǎo)致數(shù)據(jù)在原始對象的中的改變。
            __deepcopy__(self, memodict={}) 定義了當(dāng)對類的實(shí)例調(diào)用copy.deepcopy()時(shí)所產(chǎn)生的行為。copy.deepcopy()返回一個(gè)深拷貝——對象和其數(shù)據(jù)都被拷貝了。memodict是對之前被拷貝的對象的一個(gè)緩存——這優(yōu)化了拷貝過程并且阻止了對遞歸數(shù)據(jù)結(jié)構(gòu)拷貝時(shí)的無限遞歸。要進(jìn)行對一個(gè)單獨(dú)的屬性進(jìn)行深拷貝時(shí),調(diào)用copy.deepcopy(),并以memodict為第一個(gè)參數(shù)。
            Pickling 序列化 對象
            __getinitargs__(self)    如果想在類被unpickle的時(shí)候執(zhí)行__init__方法,可重載__getinitargs__方法,它會(huì)返回一個(gè)元組,包含想傳給__init__方法的參數(shù)。注意,這種方法只適用于低版本的Python。
            __getnewargs__(self)  對于新式類,在unpickle的時(shí)候可以決定傳給__new__方法的參數(shù)。以上方法可以返回一個(gè)包含想傳給__new__方法的參數(shù)元組。
            __getstate__(self)       除了儲存__dict__中的原來的那些變量,可以自定義使用pickle序列化對象時(shí)想要儲存的額外屬性。這些屬性將在unpickle文件時(shí)被__setstate__方法使用。
            __setstate__(self, state)     當(dāng)文件被unpickle時(shí),其中保存的對象屬性不會(huì)直接被寫入對象的__dict中,而是會(huì)被傳入這個(gè)方法。這個(gè)方法和__getstate__是配套的:當(dāng)他們都被定義了的時(shí)候,可以任意定義對象被序列化存儲時(shí)的狀態(tài)。
            __reduce__(self)          當(dāng)定義擴(kuò)展類(使用C語言實(shí)現(xiàn)的Python擴(kuò)展類)時(shí),可以通過實(shí)現(xiàn)__reduce__函數(shù)來控制pickle的數(shù)據(jù)。如果__reduce__()方法被定義了,在一個(gè)對象被pickle時(shí)它將被調(diào)用。如果它返回一個(gè)字符串,那么pickle在將在全局空間中搜索對應(yīng)名字的對象進(jìn)行pickle;它還可以返回一個(gè)元組,包含2-5個(gè)元素: 一個(gè)可以用來重建該對象的可調(diào)用對象,一個(gè)包含有傳給該可調(diào)用對象參數(shù)的元組,傳給__setstate__方法的參數(shù)(可選),一個(gè)用于待pickle對象列表的迭代器(譯者注:這些對象會(huì)被append到原來對象的后面)(可選)調(diào)用對象,一個(gè)包含有傳給該可調(diào)用對象參數(shù)的元組,傳給__setstate__方法的參數(shù)(可選),一個(gè)用于待pickle對象列表的迭代器(譯者注:這些對象會(huì)被append到原來對象的后面)(可選),一個(gè)用于待pickle的字典的迭代器(可選)。
            __reduce_ex__(self)  是為兼容性而設(shè)計(jì)的。如果它被實(shí)現(xiàn)了,__reduce_ex__將會(huì)取代__reduce__在pickle時(shí)被執(zhí)行。__reduce__可以同時(shí)被實(shí)現(xiàn)以支持那些不支持__reduce_ex__的老版本pickling API。

            posted on 2020-06-24 20:59 Benjamin 閱讀(535) 評論(0)  編輯 收藏 引用 所屬分類: python

            开心久久婷婷综合中文字幕| 午夜精品久久久久久影视777| 精品99久久aaa一级毛片| 久久免费高清视频| 久久国产精品无码网站| 日韩十八禁一区二区久久| 久久婷婷色综合一区二区| 欧美国产成人久久精品| 97久久久久人妻精品专区| 久久久久久噜噜精品免费直播| 中文字幕久久久久人妻| 狠狠色噜噜狠狠狠狠狠色综合久久| 久久综合九色综合久99| 久久国产乱子伦免费精品| 色婷婷狠狠久久综合五月| 丁香色欲久久久久久综合网| 青青草国产精品久久久久| 久久伊人五月丁香狠狠色| 久久精品国产亚洲麻豆| 久久精品国产久精国产| 久久国产色AV免费观看| AV狠狠色丁香婷婷综合久久| 国产免费久久精品99re丫y| 狠狠色丁香久久婷婷综合图片| 国产99久久久国产精品~~牛| 久久中文字幕一区二区| 国产精品久久久久久久午夜片| 久久久久人妻一区精品| 久久精品一区二区三区中文字幕| 国产成人精品久久一区二区三区av| 久久精品亚洲中文字幕无码麻豆| 久久国产精品无码一区二区三区| 久久久无码精品亚洲日韩蜜臀浪潮 | 青春久久| 久久婷婷国产综合精品| 国产成人精品久久| 亚洲va久久久噜噜噜久久狠狠| 国产精久久一区二区三区| 久久播电影网| 大美女久久久久久j久久| 久久精品国产99国产精品亚洲 |