Python的getattr函數(shù)方法學(xué)習(xí)使用示例
正文
__getattr__函數(shù)的作用: 如果屬性查找(attribute lookup)在實(shí)例以及對(duì)應(yīng)的類(lèi)中(通過(guò)__dict__)失敗, 那么會(huì)調(diào)用到類(lèi)的__getattr__函數(shù);
如果沒(méi)有定義這個(gè)函數(shù),那么拋出AttributeError異常。由此可見(jiàn),__getattr__一定是作用于屬性查找的最后一步
舉個(gè)栗子:
class A(object): def __init__(self, a, b): self.a1 = a self.b1 = b print('init') def mydefault(self, *args): print('default:' + str(args[0])) def __getattr__(self, name): print("other fn:", name) return self.mydefault a1 = A(10, 20) a1.fn1(33) a1.fn2('hello')
運(yùn)行結(jié)果:
init
other fn: fn1
default:33
other fn: fn2
default:hello
第16行調(diào)用fn1屬性時(shí),查找不到次屬性,程序調(diào)用__getattr__方法
用__getattr__方法可以處理調(diào)用屬性異常
class Student(object): def __getattr__(self, attrname): if attrname == "age": return 'age:40' else: raise AttributeError(attrname) x = Student() print(x.age) # 40 print(x.name)
這里定義一個(gè)Student類(lèi)和實(shí)例x,并沒(méi)有屬性age,當(dāng)執(zhí)行x.age,就調(diào)用_getattr_方法動(dòng)態(tài)創(chuàng)建一個(gè)屬性,執(zhí)行x.name時(shí),__getattr__方法沒(méi)有對(duì)其處理,拋出異常
age:40 File "XXXX.py", line 10, in <module> print(x.name) File "XXXX.py", line 6, in __getattr__ raise AttributeError(attrname) AttributeError: name
下面展示一個(gè)_getattr_經(jīng)典應(yīng)用的例子,可以調(diào)用dict的鍵值對(duì)
class ObjectDict(dict): def __init__(self, *args, **kwargs): super(ObjectDict, self).__init__(*args, **kwargs) def __getattr__(self, name): value = self[name] if isinstance(value, dict): value = ObjectDict(value) return value if __name__ == '__main__': od = ObjectDict(asf = {'a': 1}, d = True) print(od.asf, od.asf.a) # {'a': 1} 1 print(od.d) # True
以上就是Python的getattr方法學(xué)習(xí)使用示例的詳細(xì)內(nèi)容,更多關(guān)于Python getattr方法的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
詳解Python如何循環(huán)遍歷Numpy中的Array
Numpy是Python中常見(jiàn)的數(shù)據(jù)處理庫(kù),是數(shù)據(jù)科學(xué)中經(jīng)常使用的庫(kù)。在本文中,我們將學(xué)習(xí)如何迭代遍歷訪問(wèn)矩陣中的元素,需要的可以參考一下2022-04-04Python常用庫(kù)大全及簡(jiǎn)要說(shuō)明
本文為大家羅列了Python開(kāi)發(fā)的常用庫(kù)和各個(gè)庫(kù)的簡(jiǎn)要說(shuō)明以及Python開(kāi)發(fā)工具,包管理,環(huán)境管理等其它常用資源和Python學(xué)習(xí)資料2020-01-01Pandas的DataFrame如何做交集,并集,差集與對(duì)稱(chēng)差集
這篇文章主要介紹了Pandas的DataFrame如何做交集,并集,差集與對(duì)稱(chēng)差集,Python的數(shù)據(jù)類(lèi)型集合由不同元素組成的集合,集合中是一組無(wú)序排列的可?Hash?的值,可以作為字典的Key,下面來(lái)看看文章的詳細(xì)內(nèi)容吧2022-01-01開(kāi)始著手第一個(gè)Django項(xiàng)目
這篇文章主要介紹了開(kāi)始著手第一個(gè)Django項(xiàng)目的過(guò)程,Django是豐富多彩的Python框架中人氣最高的一個(gè),功能多而全,需要的朋友可以參考下2015-07-07python:刪除離群值操作(每一行為一類(lèi)數(shù)據(jù))
這篇文章主要介紹了python:刪除離群值操作(每一行為一類(lèi)數(shù)據(jù)),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-06-06基于Python socket實(shí)現(xiàn)簡(jiǎn)易網(wǎng)絡(luò)聊天室
本文主要介紹了基于Python socket實(shí)現(xiàn)簡(jiǎn)易網(wǎng)絡(luò)聊天室,本文將通過(guò)pyqt5作為桌面應(yīng)用框架,socket作為網(wǎng)絡(luò)編程的框架,從而實(shí)現(xiàn)包括客戶(hù)端和服務(wù)端的網(wǎng)絡(luò)聊天室的GUI應(yīng)用,需要的可以參考一下2022-07-07