亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

軟件測試學習教程——Python實現反射機制

系統 1748 0

序列化 (Serialization)是將對象的信息轉換為可以存儲或傳輸的形式,后續還可以通過從存儲區中讀取或反序列化對象的狀態,重新創建該對象。

在python中也可以進行序列化相關的操作,只是序列化的時候需要將對象保存為一個字典的類型。對于Python內置的數據類型(如str, unicode, int, float, bool, None, list, tuple, dict),可以直接進行序列化/反序列化處理;對于自定義類的對象進行序列化和反序列化時,需要我們自己定義一個方法來完成定義object和dict之間進行轉化。

?

?

實驗步驟:

  1. 將對象序列化為字典
  2. 讀取字典信息并反序列化為對象
  1. 導入模塊
  2. 找到模塊下的某個類
  3. 通過類名獲得類對象,注意:不是類名稱,而是類對象
  4. 通過類對象,實例化一個對象

?

?

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

模塊對象:

from 'D:\\A00__Dev\\pyprojects\\Stu\\TestTemp\\tmp.py'>

類對象為:

構造參數:{'name': 'Jonah', 'age': 12}

?

{'name': 'Jonah', 'age': 12}

?

尾注:

如果你對軟件測試感興趣,歡迎來訪:

關注作者:千鋒教育官方博客

更多免費視頻教程、學習工具獲取方式:

千鋒軟件測試①群:722498357

?

?


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 免费的成人a视频在线观看 免费的黄色网 | 99ri精品视频在线观看播放 | 国产一区二区三区免费观看 | 国内自拍网红在线综合 | www.欧美成人 | 欧美一级毛片免费高清的 | 亚洲国产图片 | 免费精品美女久久久久久久久 | 香蕉亚洲欧洲在线一区 | 亚洲欧美另类视频 | 91在线视频免费观看 | 日本不卡视频在线视频观看 | 亚洲免费在线视频播放 | 奇米影音四色 | 国产精品尹人在线观看免费 | 欧美一级毛片图 | 偷亚洲偷国产欧美高清 | 精品久久久久久 | 热久久久久久 | 国产成人综合亚洲一区 | 日日夜夜中文字幕 | 久久www免费人成看片入口 | 久久久久久国产精品视频 | 欧美亚洲另类视频 | 国产成人精品久久亚洲高清不卡 | 国产精亚洲视频 | 亚洲精品中文字幕乱码一区二区 | 欧洲亚洲综合一区二区三区 | 亚洲一区二区三区成人 | 123日本不卡在线观看 | 中文字幕在线亚洲精品 | 国产欧美精品综合一区 | 久久久青青 | 亚洲国产一区二区在线 | 天天在线欧美精品免费看 | 黄色福利在线观看 | 能在线观看的一区二区三区 | 97视频免费播放观看在线视频 | 久久精品国产屋 | 一区二区中文字幕亚洲精品 | 青青久草在线视频 |