Python反射操作對(duì)象屬性方法詳解
前言:
眾所周知,每一個(gè)實(shí)例化對(duì)象都是有實(shí)例化屬性或者方法的,之前我們對(duì)實(shí)例化對(duì)象進(jìn)行屬性方法查詢、刪除或者添加都是直接去通過對(duì)象名.屬性 去操作的
所以今天我來(lái)講其他方法去操作實(shí)例化對(duì)象的屬性方法,看正文:
反射
在Python面對(duì)對(duì)象中,通過字符串的形式去操作對(duì)象的屬性方法就稱之為反射(在Python中一切事物都是可以為對(duì)象)
對(duì)象反射這里提供了以下幾個(gè)內(nèi)置字符串函數(shù):
- getattr 獲取指定對(duì)象的屬性以及方法
- setattr 設(shè)置對(duì)象屬性
- hasattr 判斷對(duì)象是否有這個(gè)屬性以及方法
- delattr 刪除對(duì)象屬性
下面進(jìn)行一一細(xì)講
1.getattr() 函數(shù)
格式:
變量名 = getattr(對(duì)象, 對(duì)象屬性, 默認(rèn)值)
作用:
獲取指定對(duì)象的屬性以及方法,然后返回這個(gè)屬性或者方法
示例:
class A(object): def __init__(self,name): self.name=name def fun(self): print(f'我是{self.name}') user=A('Jack') print(user.name) #輸出 Jack b=getattr(user,'name') a=getattr(user,'age',18) #注意注意?。?! print(user.age)#報(bào)錯(cuò)的 c=getattr(user,'fun') print(b,a) c() print(user.__dict__) #輸出結(jié)果: # Jack 18 # 我是Jack # {'name': 'Jack'}
注意看,這里我a=getattr(user,'age',18),其中age不是這個(gè)實(shí)例化對(duì)象的屬性,只是我通過這個(gè)函數(shù)把18這個(gè)數(shù)字賦值給了c,實(shí)際上user和age并沒有參與這個(gè)賦值,因?yàn)閡ser與age一定關(guān)系都沒有。下面通過__dict__就很明顯看出來(lái)
2.setattr() 函數(shù)
格式:
setattr(對(duì)象, "對(duì)象屬性", 值)
作用:
添加設(shè)置對(duì)象屬性
示例:
#給對(duì)象添加屬性 class A(object): def __init__(self,name): self.name=name def fun(self): print(f'我是{self.name}') user=A('Jack') #之前的做法:直接添加 user.age=18 print(user.age) #通過字符串操作 setattr(user,'num','137***55***') print(user.name,user.num) print(user.__dict__) #輸出結(jié)果: # 18 # Jack 137***55*** # {'name': 'Jack', 'age': 18, 'num': '137***55***'}
3.hasattr() 函數(shù)
格式:
變量 = hasattr(對(duì)象, "對(duì)象屬性")
作用:
判斷對(duì)象是否有這個(gè)屬性以及方法 ,返回布爾類型
示例:
class A(object): def __init__(self,name): self.name=name def fun(self): print(f'我是{self.name}') user=A('Jack') print(hasattr(user,'age')) #False print(hasattr(user,'name')) #True print(hasattr(user,'fun')) #True
4.delattr() 函數(shù)
格式:
delattr(對(duì)象, 對(duì)象屬性)
作用:
刪除對(duì)象屬性或者方法
示例:
class A(object): def __init__(self,name,age): self.name=name self.age=age def fun(self): print(f'我是{self.name}') user=A('Jack',18)#{'name': 'Jack', 'age': 18} print(user.__dict__) delattr(user,'age') #等效于 del user.age print(user.__dict__)#{'name': 'Jack'}
可以看出,實(shí)例化對(duì)象user中的age屬性被刪除了
當(dāng)然,這四個(gè)函數(shù)不單單可以在實(shí)例化對(duì)象使用,Python一切皆對(duì)象,所以一個(gè)模塊,一個(gè)函數(shù)都是可以去使用的,這里就不多說了。
到此這篇關(guān)于Python反射操作對(duì)象屬性方法詳解的文章就介紹到這了,更多相關(guān)Python反射操作對(duì)象內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python3解析庫(kù)BeautifulSoup4的安裝配置與基本用法
簡(jiǎn)單來(lái)說,BeautifulSoup就是Python的一個(gè)HTML或XML的解析庫(kù),我們可以用它來(lái)方便地從網(wǎng)頁(yè)中提取數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于python3解析庫(kù)BeautifulSoup4的安裝配置與基本用法的相關(guān)資料,需要的朋友可以參考下2018-06-06python導(dǎo)出requirements.txt的幾種方法總結(jié)
這篇文章主要介紹了python導(dǎo)出requirements.txt的幾種方法總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02Python3實(shí)現(xiàn)發(fā)送QQ郵件功能(附件)
這篇文章主要為大家詳細(xì)介紹了Python3實(shí)現(xiàn)發(fā)送QQ郵件功能,附件方面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12Pandas實(shí)現(xiàn)(pivot_table函數(shù))數(shù)據(jù)透視表方式
pandas的pivot_table()函數(shù)非常強(qiáng)大,主要用于創(chuàng)建數(shù)據(jù)透視表,重要參數(shù)包括index、values、columns和aggfunc,index用于設(shè)置行索引,類似于SQL中的group by,values用于進(jìn)行聚合計(jì)算的數(shù)據(jù)選擇,columns參數(shù)可設(shè)置列層次,非必須2024-09-09python中@property和property函數(shù)常見使用方法示例
這篇文章主要介紹了python中@property和property函數(shù)常見使用方法,結(jié)合實(shí)例形式分析了Python @property和property函數(shù)功能、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2019-10-10