Python的getattr函數(shù)方法學(xué)習(xí)使用示例
正文
__getattr__函數(shù)的作用: 如果屬性查找(attribute lookup)在實(shí)例以及對(duì)應(yīng)的類中(通過(guò)__dict__)失敗, 那么會(huì)調(diào)用到類的__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類和實(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-04
Python常用庫(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-01
Pandas的DataFrame如何做交集,并集,差集與對(duì)稱差集
這篇文章主要介紹了Pandas的DataFrame如何做交集,并集,差集與對(duì)稱差集,Python的數(shù)據(jù)類型集合由不同元素組成的集合,集合中是一組無(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-07
python:刪除離群值操作(每一行為一類數(shù)據(jù))
這篇文章主要介紹了python:刪除離群值操作(每一行為一類數(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)包括客戶端和服務(wù)端的網(wǎng)絡(luò)聊天室的GUI應(yīng)用,需要的可以參考一下2022-07-07

