python反射詳解

2021-09-12 09:56:01 字數 1410 閱讀 5758

反射

#hasattr(obj,name_str)判斷乙個物件obj裡是否有對應的name_str字串的方法

#getattr(obj,name_str)根據字串去獲取obj物件裡的對應的方法的記憶體位址

#setattr(object, name, value) setattr(x,「foobar」,123)相當於x.foobar = 123。

#delattr(object, name) 該函式刪除該obj的乙個由string指定的屬性。delattr(x, 'foobar')=del x.foobar

class  test(object):

def __init__(self,name):

self.name=name

def test1(self,fruit):

print("%s吃%s水果"%(self.name,fruit))

t=test('王荔')

#存在此方法

if hasattr(t,'test1'):#檢查成員

func=getattr(t,'test1')#獲取方法位址

func('西瓜')

else:

setattr(t,'name','王力') #設定成員

print(t.name)

#不存在此方法,設定變數或修改變數

if hasattr(t,'test10'):#檢查成員

func=getattr(t,'name')#獲取變數

print(func)

else:

setattr(t,'age',30) #設定變數

setattr(t, 'name','王力') #修改變數

print(t.name,t.age)

#通過setattr方法把test3函式動態裝配到t這個例項裡,方法名是"test2"

def test3(self):

print('類外的方法繫結到類內')

setattr(t,'test2',test3)

func=getattr(t,'test2')

func(t)

#刪除變數、刪除方法

delattr(t,'name')

#delattr(t,'test1')

#print(t.name)

#print(t.test1())

c:\users\wangli\pycharmprojects\automation\venv\scripts\python.exe c:/users/wangli/pycharmprojects/automation/case/test.py

王荔吃西瓜水果

王力 30

類外的方法繫結到類內

process finished with exit code 0

ProtoBuf 反射詳解

protocol buffer 簡稱 protobuf,是用於結構化資料序列化的靈活 高效 自動的方法,又如 xml,不過它更小 更快 也更簡單。你可以定義自己的資料結構,然後使用 生成器生成的 來讀寫這個資料結構。你甚至可以在無需重新部署程式的情況下更新資料結構。本文主要介紹 protobuf 裡...

Python自省及反射原理例項詳解

python中的自省與反射 由於python是一門強型別的動態解釋型語言,故我們在某些時候並不會知道 特別是與別人對接開發工作的時候 物件中具有的屬性與方法。這個時候我們並不能直接通過 或者檢視底層的 dict 方法來獲得該物件下的屬性與方法,我們需要使用一種更文明的方式來獲取該物件下的屬性與方法,...

python 反射 python中的反射

什麼是反射?有時我們要訪問某個變數或是方法時並不知道到底有沒有這個變數或方法,所以就要做些判斷。判斷是否存在字串對應的變數及方法。我們知道訪問變數時是不能加引號的,否則會被當成字串處理。如果要通過字串找到對應的變數,那該怎麼辦呢 反射就是用於解決上面兩個問題而產生的,所謂反射,按我的理解就是反過來告...