欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

python的描述符(descriptor)、裝飾器(property)造成

系統(tǒng) 1798 0

分享一下剛遇到的一個(gè)小問題,我有一段類似于這樣的python代碼:

復(fù)制代碼 代碼如下:

# coding: utf-8

class A(object):

??? @property
??? def _value(self):
#??????? raise AttributeError("test")
??????? return {"v": "This is a test."}

??? def __getattr__(self, key):
??????? print "__getattr__:", key
??????? return self._value[key]

if __name__ == '__main__':
??? a = A()
??? print a.v


運(yùn)行后可以得到正確的結(jié)果
復(fù)制代碼 代碼如下:

__getattr__: v
This is a test.

但是注意,如果把
復(fù)制代碼 代碼如下:

#??????? raise AttributeError("test")


這行的注釋去掉的話,即在_value方法里面拋出AttributeError異常,事情就會(huì)變得有些奇怪。程序運(yùn)行的時(shí)候并不會(huì)拋出異常,而是會(huì)進(jìn)入一個(gè)無限遞歸:

復(fù)制代碼 代碼如下:

File "attr_test.py", line 12, in __getattr__
??? return self._value[key]
? File "attr_test.py", line 12, in __getattr__
??? return self._value[key]
RuntimeError: maximum recursion depth exceeded while calling a Python object

通過多方查找后發(fā)現(xiàn)是property裝飾器的問題,property實(shí)際上是一個(gè)descriptor。在python doc中可以發(fā)現(xiàn)這樣的文字:

復(fù)制代碼 代碼如下:

object.__get__(self, instance, owner)

Called to get the attribute of the owner class (class attribute access) or of an instance of that class (instance attribute access). owner is always the owner class, while instance is the instance that the attribute was accessed through, or None when the attribute is accessed through the owner. This method should return the (computed) attribute value or raise an AttributeError exception.

這樣當(dāng)用戶訪問._value時(shí),拋出了AttributeError從而調(diào)用了__getattr__方法去嘗試獲取。這樣程序就變成了無限遞歸。

這個(gè)問題看上去不復(fù)雜,但是當(dāng)你的_value方法是比較隱晦的拋出AttributeError的話,調(diào)試起來就會(huì)比較困難了。


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦?。?!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲欧洲精品一区二区 | 欧美成人免费午夜影视 | 欧美黄视频| 台湾三级无遮挡在线播放 | 91短视频在线高清hd | 成人九色| 国产亚洲欧美在线 | 日韩中文字幕一区二区三区 | 免费看成年人网站 | 国产一区二区在线免费观看 | 五月婷六月丁香狠狠躁狠狠爱 | 精品国产欧美一区二区 | 毛片国产| 久草精彩视频 | 精品亚洲一区二区三区四区五区 | 搞黄视频在线观看 | 婷婷综合激情五月中文字幕 | 久久久久久久国产 | 欧美一区二区三区在线视频 | 亚洲国产成人av好男人在线观看 | 日韩在线视频一区 | 美女午夜色视频在线观看 | 久久久久国产精品一区 | 9久热这里只有精品视频在线观看 | 91免费片 | 色婷婷综合在线 | 国产在线视频一区二区 | 99国产精品久久久 | 九九热国产视频 | 欧美日韩精品一区二区三区 | 精品成人免费一区二区在线播放 | 久久1区| 深夜福利软件 | 精品啪啪 | 国内精品久久久久久2021浪潮 | 亚洲欧美日韩在线观看播放 | 色综合天天综合网国产成人网 | 日韩精品一区二区三区不卡 | 国产亚洲精品久久无亚洲 | 秋霞影院精品久久久久 | 欧美日韩在线国产 |