亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Python 魔法方法

187J3X1 / 993人閱讀

摘要:魔法方法基礎(chǔ)如果你想所以你寫調(diào)用初始化一個(gè)實(shí)例作為一個(gè)字符串的官方表示作為一個(gè)字符串作為字節(jié)數(shù)組作為格式化字符串方法在創(chuàng)建實(shí)例后調(diào)用如果你想控制創(chuàng)建過程請(qǐng)使用方法按照慣例應(yīng)該返回一個(gè)有效的表達(dá)式的字符串方法也被稱為你的迭代相關(guān)如果你想所以你

Python 魔法方法 基礎(chǔ):
如果你想... 所以,你寫... Python調(diào)用...
初始化一個(gè)實(shí)例 x = MyClass() x.__init__()
作為一個(gè)字符串的"官方"表示 repr(x) x.__repr__()
作為一個(gè)字符串 str(x) x.__str__()
作為字節(jié)數(shù)組 bytes(x) x.__bytes__()
作為格式化字符串 format(x, format_spec) x.__format__(format_spec)

__init__()方法在創(chuàng)建實(shí)例后調(diào)用.如果你想控制創(chuàng)建過程,請(qǐng)使用__new__()方法

按照慣例, __repr__() 應(yīng)該返回一個(gè)有效的Python表達(dá)式的字符串

__str__()方法也被稱為你的print(x)

迭代相關(guān)
如果你想... 所以,你寫... Python調(diào)用...
遍歷一個(gè)序列 iter(seq) seq.__iter__()
從迭代器中獲取下一個(gè)值 next(seq) seq.__next__()
以相反的順序創(chuàng)建一個(gè)迭代器 reversed(seq) seq.__reversed__()

__iter__()無論何時(shí)創(chuàng)建新的迭代器,都會(huì)調(diào)用該方法.

__next__()每當(dāng)你從迭代器中檢索一下個(gè)值的時(shí)候,都會(huì)調(diào)用該方法

__reversed__()方法并不常見.它需要一個(gè)現(xiàn)有序列并返回一個(gè)迭代器,該序列是倒序的順序.

屬性
如果你想... 所以,你寫... Python調(diào)用...
得到一個(gè)屬性 x.my_property x.__getattribute__("my_property")
獲得一個(gè)屬性 x.my_property x.__getattr__("my_property")
設(shè)置一個(gè)屬性 x.my_property = value x.__setattr__("my_property", value)
闡述一個(gè)屬性 del x.my_property x.__delattr__("my_property")
列出所有屬性和方法 dir(x) x.__dir__()

如果你的類定義了一個(gè)__getattribute__()方法,Python將在每次引用任何屬性或方法名時(shí)調(diào)用它.

如果你的類定義了一個(gè)__getattr__()方法,Python只會(huì)在所有普通地方查找屬性后調(diào)用它.如果一個(gè)實(shí)例x定義了一個(gè)屬性 color, x.color將不會(huì)調(diào)用x.__getattr__("color"); 它將簡(jiǎn)單地返回已經(jīng)定義的x.color值.

__setattr__()只要你為屬性指定值,就會(huì)調(diào)用該方法.

__delattr__()只要?jiǎng)h除屬性,就會(huì)調(diào)用該方法.

__dir__()如果您定義一個(gè)__getattr__() 或者 __getattribute__() 方法,該方法很有用.通常情況下,調(diào)用dir(x)只會(huì)列出常規(guī)屬性和方法.

__getattr__()__getattribute__()方法之間的區(qū)別很微妙但很重要.

函數(shù)類

通過定義__call__()方法,您可以創(chuàng)建一個(gè)可調(diào)用類的實(shí)例 - 就像函數(shù)可調(diào)用一樣.

如果你想... 所以,你寫... Python調(diào)用...
來"調(diào)用"像函數(shù)一樣的實(shí)例 my_instance() my_instance.__call__()
行為

如果你的類作為一組值的容器 - 也就是說,如果問你的類是否"包含"一個(gè)值是有意義的 - 那么它應(yīng)該定義下面的特殊方法,使它像一個(gè)集合一樣.

如果你想... 所以,你寫... Python調(diào)用...
序列的數(shù)量 len(s) s.__len__()
否包含特定的值 x in s s.__contains__(s)
字典(映射)
如果你想... 所以,你寫... Python調(diào)用...
通過它的key來獲得值 x[key] x.__getitem__(key)
通過它的key來設(shè)置一個(gè)值 x[key] = value x.__setitem__(key, value)
刪除鍵值對(duì) del x[key] x.__delitem__(key)
為丟失的key提供默認(rèn)值 x[nonexistent_key] x.__missing__(nonexistent_key)
數(shù)字
如果你想... 所以,你寫... Python調(diào)用...
x + y x.__add__(y)
x - y x.__sub__(y)
x * y x.__mul__(y)
整除 x / y x.__trueiv__(y)
x // y x.__floordiv__(v)
取余 x % y x.__mod__(y)
整除與取余 divmod(x, y) x.__divmod__(y)
平方 x ** y x.__pow__(y)
左移 x << y x.__lshift__(y)
友移 x >> y x.__rshift__(y)
按位and運(yùn)算 x & y x.__and__(y)
按位xor或運(yùn)算 x ^ y x.__xor__(y)
按位or運(yùn)算 `x y` x.__or__(y)

上述一組特殊方法采用第一種方法:給定x / y,它們提供了一種方法讓x說"我知道如何用y整除自己".以下一組特殊方法解決了第二種方法:它們?yōu)閥提供了一種方法來說"我知道如何成為分母,并將自己整除x".

如果你想... 所以,你寫... Python調(diào)用...
x + y x.__radd__(y)
x - y x.__rsub__(y)
x * y x.__rmul__(y)
整除 x / y x.__rtrueiv__(y)
x // y x.__rfloordiv__(v)
取余 x % y x.__rmod__(y)
整除與取余 divmod(x, y) x.__rdivmod__(y)
平方 x ** y x.__rpow__(y)
左移 x << y x.__rlshift__(y)
友移 x >> y x.__rrshift__(y)
按位and運(yùn)算 x & y x.__rand__(y)
按位xor或運(yùn)算 x ^ y x.__rxor__(y)
按位or運(yùn)算 `x y` x.__ror__(y)

可是等等!還有更多!如果你正在進(jìn)行"就地"操作,如x /= 3則可以定義更多特殊的方法.

如果你想... 所以,你寫... Python調(diào)用...
x + y x.__iadd__(y)
x - y x.__isub__(y)
x * y x.__imul__(y)
整除 x / y x.__itrueiv__(y)
x // y x.__ifloordiv__(v)
取余 x % y x.__imod__(y)
整除與取余 divmod(x, y) x.__idivmod__(y)
平方 x ** y x.__ipow__(y)
左移 x << y x.__ilshift__(y)
友移 x >> y x.__irshift__(y)
按位and運(yùn)算 x & y x.__iand__(y)
按位xor或運(yùn)算 x ^ y x.__ixor__(y)
按位or運(yùn)算 `x y` x.__ior__(y)

還有一些"單個(gè)數(shù)"數(shù)學(xué)運(yùn)算可以讓你自己對(duì)類似數(shù)字的對(duì)象進(jìn)行數(shù)學(xué)運(yùn)算.

如果你想... 所以,你寫... Python調(diào)用...
負(fù)數(shù) -x x.__neg__()
正數(shù) +x x.__pos__()
絕對(duì)值 abs(x) x.__abs__()
~x x.__invert__()
復(fù)數(shù) complex(x) x.__complex__()
整數(shù) int(x) x.__int__()
浮點(diǎn)數(shù) float(x) x.__float__()
四舍五入到最近的整數(shù) round(x) x.__round__()
四舍五入到最近的n位數(shù) round(x, n) x.__round__(n)
最小整數(shù) math.ceil(x) x.__ceil__()
最大整數(shù) math.floor(x) x.__floor__()
截?cái)鄕到0的最接近的整數(shù) math.trunc(x) x.__trunc__()
數(shù)字作為列表索引 a_list[x] a_list[x.__index__()]
比較
如果你想... 所以,你寫... Python調(diào)用...
等于 x == y x.__eq__(y)
不等于 x != y x.__ne__(y)
小于 x < y x.__lt__(y)
小于等于 x <= y x.__le__(y)
大于 x > y x.__gt__(y)
大于等于 x >= y x.__ge__(y)
布爾 if x: x.__bool__()
序列化
如果你想... 所以,你寫... Python調(diào)用...
對(duì)象副本 copy.copy(x) x.__copy__()
深拷貝 copy.deepcopy(x) x.__deepcopy__()
序列化一個(gè)對(duì)象 pickle.dump(x, file) x.__getstate__()
序列化一個(gè)對(duì)象 pickle.dump(x, file) x.__reduce__()
序列化一個(gè)對(duì)象 pickle.dump(x, file, protocol_version) x.__reduce_ex__(protocol_version)
取出恢復(fù)后的狀態(tài) x = pickle.load(fp) x.__getnewargs__()
取出恢復(fù)后的狀態(tài) x = pickle.load(fp) x.__setstate__()
with 語句

with塊限定了運(yùn)行時(shí)上下文;在執(zhí)行with語句時(shí),"進(jìn)入"上下文,并在執(zhí)行塊中的最后一個(gè)語句后"退出"上下文.

如果你想... 所以,你寫... Python調(diào)用...
進(jìn)入with語句塊 with x: x.__enter__()
退出with語句塊 with x: x.__exit__(exc_type, exc_value, traceback)
真正深?yuàn)W的東西
如果你想... 所以,你寫... Python調(diào)用...
x = MyClass() x.__new__()
del x x.__del__()
`` x.__solts__()
hash(x) x.__hash__()
x.color type(x).__dict__["color"].__get__(x, type(x))
x.color = "PapayaWhip" type(x).__dict__["color"].__set__(x, "PapayaWhip")
del x.color type(x).__dict__["color"].__del__(x)
isinstance(x, MyClass) MyClass.__instancecheck__(x)
isinstance(C, MyClass) MyClass.__subclasscheck__(C)
isinstance(C, MyABC) MyABC.__subclasshook__(C)

Python正確調(diào)用__del__()特殊方法時(shí)非常復(fù)雜.為了完全理解它,你需要知道Python如何跟蹤內(nèi)存中的對(duì)象.這里有一篇關(guān)于Python垃圾收集和類析構(gòu)函數(shù)的好文章.你還應(yīng)該閱讀關(guān)于弱引用,weakref模塊,以及可能的gc模塊以獲得更好的度量.

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/41785.html

相關(guān)文章

  • Python “黑魔法” 之 Meta Classes

    摘要:幸而,提供了造物主的接口這便是,或者稱為元類。接下來我們將通過一個(gè)栗子感受的黑魔法,不過在此之前,我們要先了解一個(gè)語法糖。此外,在一些小型的庫中,也有元類的身影。 首發(fā)于 我的博客 轉(zhuǎn)載請(qǐng)注明出處 接觸過 Django 的同學(xué)都應(yīng)該十分熟悉它的 ORM 系統(tǒng)。對(duì)于 python 新手而言,這是一項(xiàng)幾乎可以被稱作黑科技的特性:只要你在models.py中隨便定義一個(gè)Model的子類,Dj...

    LeoHsiun 評(píng)論0 收藏0
  • Python “黑魔法” 之 Encoding & Decoding

    摘要:我可以明確告訴你這不是,但它可以用解釋器運(yùn)行。這種黑魔法,還要從說起。提案者設(shè)想使用一種特殊的文件首注釋,用于指定代碼的編碼。暴露了一個(gè)函數(shù),用于注冊(cè)自定義編碼。所謂的黑魔法其實(shí)并不神秘,照貓畫虎定義好相應(yīng)的接口即可。 首發(fā)于我的博客,轉(zhuǎn)載請(qǐng)注明出處 寫在前面 本文為科普文 本文中的例子在 Ubuntu 14.04 / Python 2.7.11 下運(yùn)行成功,Python 3+ 的接...

    鄒強(qiáng) 評(píng)論0 收藏0
  • python魔法算法詳解

    摘要:據(jù)說,的對(duì)象天生擁有一些神奇的方法,它們總被雙下劃線所包圍,他們是面向?qū)ο蟮牡囊磺?。的魔術(shù)方法非常強(qiáng)大,然而隨之而來的則是責(zé)任。 據(jù)說,Python 的對(duì)象天生擁有一些神奇的方法,它們總被雙下劃線所包圍,他們是面向?qū)ο蟮?Python 的一切。 他們是可以給你的類增加魔力的特殊方法,如果你的對(duì)象實(shí)現(xiàn)(重載)了這些方法中的某一個(gè),那么這個(gè)方法就會(huì)在特殊的情況下被 Python 所調(diào)用,你...

    孫吉亮 評(píng)論0 收藏0
  • 讓mysqldump變成并發(fā)導(dǎo)出導(dǎo)入的魔法

    摘要:,指定并發(fā)導(dǎo)出或?qū)刖€程數(shù)。默認(rèn)線程數(shù),默認(rèn)線程數(shù)是個(gè)數(shù)。注線程數(shù)不是越大越好,這里主要的衡量指標(biāo)是網(wǎng)絡(luò)帶寬磁盤目標(biāo)庫,最好用觀察一下。 1. 簡(jiǎn)介 取名mypumpkin,是python封裝的一個(gè)讓mysqldump以多線程的方式導(dǎo)出庫表,再以mysql命令多線程導(dǎo)入新庫,用于成倍加快導(dǎo)出,特別是導(dǎo)入的速度。這一切只需要在 mysqldump 或 mysql 命令前面加上 mypum...

    KitorinZero 評(píng)論0 收藏0
  • 經(jīng)驗(yàn)拾憶(純手工)=> Python__黑魔法__

    摘要:類的繼承類繼承有三種調(diào)用方式,其實(shí)是有區(qū)別的,聽我慢慢道來第一種父類方法參數(shù)直接調(diào)用第二種方法參數(shù)直接調(diào)用在誰的類下調(diào)用,就找此類對(duì)應(yīng)的下一個(gè)就是要繼承的第三種方法參數(shù)找類名對(duì)應(yīng)的的下一個(gè),就是繼承的,一般寫本身的類名上下文管理器上下文管理 類的繼承 類繼承有三種調(diào)用方式,其實(shí)是 有區(qū)別 的,聽我慢慢道來 class A: def say(self, name): ...

    tulayang 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

187J3X1

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<