华南俳烁实业有限公司

python

當(dāng)前位置:中華考試網(wǎng) >> python >> python問(wèn)答 >> 文章內(nèi)容

什么是Python描述符?

來(lái)源:中華考試網(wǎng)  [2020年10月17日]  【

  什么是Python描述符?剛學(xué)習(xí)Python的可能對(duì)它一無(wú)所知,下面就給大家詳細(xì)解釋Python描述符,看明白后就能清楚的知道描述符的實(shí)際作用了。

  Python 中,通過(guò)使用描述符,可以讓程序員在引用一個(gè)對(duì)象屬性時(shí)自定義要完成的工作。

  本質(zhì)上看,描述符就是一個(gè)類(lèi),只不過(guò)它定義了另一個(gè)類(lèi)中屬性的訪(fǎng)問(wèn)方式。換句話(huà)說(shuō),一個(gè)類(lèi)可以將屬性管理全權(quán)委托給描述符類(lèi)。

  描述符是 Python 中復(fù)雜屬性訪(fǎng)問(wèn)的基礎(chǔ),它在內(nèi)部被用于實(shí)現(xiàn) property、方法、類(lèi)方法、靜態(tài)方法和 super 類(lèi)型。

  描述符類(lèi)基于以下 3 個(gè)特殊方法,換句話(huà)說(shuō),這 3 個(gè)方法組成了描述符協(xié)議:

  __set__(self, obj, type=None):在設(shè)置屬性時(shí)將調(diào)用這一方法(本節(jié)后續(xù)用 setter 表示);

  __get__(self, obj, value):在讀取屬性時(shí)將調(diào)用這一方法(本節(jié)后續(xù)用 getter 表示);

  __delete__(self, obj):對(duì)屬性調(diào)用 del 時(shí)將調(diào)用這一方法。

  其中,實(shí)現(xiàn)了 setter 和 getter 方法的描述符類(lèi)被稱(chēng)為數(shù)據(jù)描述符;反之,如果只實(shí)現(xiàn)了 getter 方法,則稱(chēng)為非數(shù)據(jù)描述符。

  實(shí)際上,在每次查找屬性時(shí),描述符協(xié)議中的方法都由類(lèi)對(duì)象的特殊方法 __getattribute__() 調(diào)用(注意不要和 __getattr__() 弄混)。也就是說(shuō),每次使用類(lèi)對(duì)象.屬性(或者 getattr(類(lèi)對(duì)象,屬性值))的調(diào)用方式時(shí),都會(huì)隱式地調(diào)用 __getattribute__(),它會(huì)按照下列順序查找該屬性:

  1.驗(yàn)證該屬性是否為類(lèi)實(shí)例對(duì)象的數(shù)據(jù)描述符;

  2.如果不是,就查看該屬性是否能在類(lèi)實(shí)例對(duì)象的 __dict__ 中找到;

  3.最后,查看該屬性是否為類(lèi)實(shí)例對(duì)象的非數(shù)據(jù)描述符。

責(zé)編:fushihao
  • 會(huì)計(jì)考試
  • 建筑工程
  • 職業(yè)資格
  • 醫(yī)藥考試
  • 外語(yǔ)考試
  • 學(xué)歷考試
大埔区| 澳门| 开江县| 柳林县| 崇仁县| 广昌县| 漳浦县| 秀山| 乐昌市| 柳林县| 津南区| 射洪县| 九江县| 岳普湖县| 吉安市| 泸水县| 永泰县| 铜陵市| 东方市| 米脂县| 句容市| 兴安县| 疏附县| 舟山市| 广州市| 云阳县| 乐昌市| 枣阳市| 邛崃市| 郸城县| 哈尔滨市| 辽宁省| 涿州市| 和顺县| 奇台县| 永善县| 金沙县| 武川县| 南川市| 宜兰市| 天长市|