軟體測試學習教程——Python實現反射機制
序列化(Serialization)是將物件的資訊轉換為可以儲存或傳輸的形式,後續還可以透過從儲存區中讀取或反序列化物件的狀態,重新建立該物件。
在python中也可以進行序列化相關的操作,只是序列化的時候需要將物件儲存為一個字典的型別。對於Python內建的資料型別(如str,unicode,int,float,bool,None,list,tuple,dict),可以直接進行序列化/反序列化處理;對於自定義類的物件進行序列化和反序列化時,需要我們自己定義一個方法來完成定義object和dict之間進行轉化。
實驗步驟:
1.將物件序列化為字典
2.讀取字典資訊並反序列化為物件
A.匯入模組
B.找到模組下的某個類
C.透過類名獲得類物件,注意:不是類名稱,而是類物件
D.透過類物件,例項化一個物件
tmp.py
--------------------------------------------------------------------------------------
class T:
def __init__(self,name,age):
self.name=name
self.age=age
tmp2.py
--------------------------------------------------------------------------------------
#第一種寫法,將物件轉化為字典
def obj2dict(obj):
#定義一個空白的字典,此處沒有使用d={}方式,因為PyCharm會產生警告
d=dict()
#寫入模組和類名,用於反射
d['class_name']=obj.__class__.__name__
d['module_name']=obj.__module__
#將物件返回的字典(只包括欄位)和類資訊連線為一個新的字典
d.update(obj.__dict__)
return d
#第二種寫法,將物件轉化為字典
def obj2dict(obj):
new_dict=obj.__dict__
new_dict['class_name']=obj.__class__.__name__
new_dict['module_name']=obj.__module__
return new_dict
def dict2obj(dic):
if'class_name'in dic:
info="【\n"+"\t接收字典:"+str(dic)+"\n"
#獲取類名稱和模組名稱,並彈出
class_name=dic.pop('class_name')
module_name=dic.pop('module_name')
info+="\t類名稱為:"+str(class_name)+"\n"\
+"\t模組名稱:"+str(module_name)+"\n"
#匯入模組,返回已經匯入的“模組物件”
#fromlist代表多級匯入(否則只能匯入到目錄級別)
module_obj=__import__(module_name,
fromlist=["True"])
info+="\t模組物件:"+str(module_obj)+"\n"
#透過“類名稱”返回“類物件”
#第一個引數必需傳已經匯入的“模組物件”,不能傳“模組名稱”
class_obj=getattr(module_obj,class_name)
info+="\t類物件為:"+str(class_obj)+"\n"\
+"\t構造引數:"+str(dic)+"\n"+"】"
print(info)
#反射例項化一個物件
instance=class_obj(**dic)
else:
instance=dic
return instance
tmp3.py
--------------------------------------------------------------------------------------
from TestTemp.tmp import T
from TestTemp.tmp2 import*
if __name__=="__main__":
t=T("Jonah",12)
dic=obj2dict(t)#物件轉字典
ob=dict2obj(dic)#字典轉物件
print(ob)
print(ob.__dict__)
執行結果:
【
接收字典:{'class_name':'T','module_name':'TestTemp.tmp',
'name':'Jonah','age':12}
類名稱為:T
模組名稱:TestTemp.tmp
模組物件:<module'TestTemp.tmp'
from'D:\\A00__Dev\\pyprojects\\Stu\\TestTemp\\tmp.py'>
類物件為:<class'TestTemp.tmp.T'>
構造引數:{'name':'Jonah','age':12}
】
<TestTemp.tmp.T object at 0x00000000025EF630>
{'name':'Jonah','age':12}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69914734/viewspace-2656464/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 軟體測試學習教程——LoadRunner實現介面測試
- 軟體測試學習教程——Java實現氣泡排序Java排序
- 軟體測試學習教程—軟體測試質量
- 軟體測試學習教程—軟體測試基本知識
- 軟體測試學習教程——【大蟒蛇】python基礎Python
- 軟體測試學習教程—迴歸測試
- 軟體測試學習教程——Python SMTP傳送郵件Python
- 軟體測試學習教程——JDBC配置JDBC
- 軟體測試學習教程—軟體測試基礎理論五
- 軟體測試學習教程—軟體測試基礎理論六
- 軟體測試學習教程—軟體測試基礎理論四
- 軟體測試學習教程—軟體測試基礎理論三
- 軟體測試學習教程—【其他必備技術】JAVA異常處理機制Java
- 軟體測試學習教程——JDBC開發JDBC
- 軟體測試學習教程——JDBC介紹JDBC
- 軟體測試學習教程——WEB測試之JS記憶體WebJS記憶體
- 軟體測試教程之手機軟體測試方法
- 軟體測試學習教程—JavaScript內建物件JavaScript物件
- 軟體測試學習教程—Web測試之正規表示式Web
- 軟體測試學習 ——五種軟體測試模型模型
- 單元測試&反射機制(未完結)反射
- 軟體測試學習教程——HP Loadrunner12.50安裝教程
- 軟體測試學習教程—Jmeter元件介紹(二)JMeter元件
- java反射機制的學習心得Java反射
- 學習旅途(軟體測試)
- 軟體測試整理學習
- 物聯網學習教程—多型的實現機制多型
- 軟體測試培訓分享:學習能力差可以學習軟體測試嗎
- 軟體測試學習路線
- 【軟體測試】學習筆記筆記
- 【分享】—如何學習軟體測試
- 2020版軟體測試全新4.0教程震撼來襲,不一樣的軟體測試學習路
- 軟體測試學習網站有哪些?怎麼學軟體測試呢?學習網站
- 軟體測試學習教程——CentOS 7 修改網路卡設定CentOS
- 軟體測試學習——移動端功能測試分析
- 軟體測試的具體學習路線
- 軟體測試學習教程——過載new或delete來檢測記憶體洩漏delete記憶體
- 軟體測試要學什麼(1)黑盒測試詳解教程