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