反射
對於初學python可能較難理解,但反射是非常有用。
試想一下,當別的程式傳入給你寫的這段**乙個變數(var=「math」),這個變數是乙個字串,這個字串是乙個模組或者乙個模組下的某個方法,你需要通過變數來匯入此模組或者方法,如何匯入此模組或方法呢,如果直接執行 import var是會出錯的,因為var在你的這段**中是乙個變數, 這時就需要反射, 如何使用反射呢。
如果這個變數值是乙個模組,可以使用mathmodule=__import__(var), 匯入後,你可以在你的**中用mathmodule.***來呼叫math模組下的任意方法
當需要獲得乙個模組下的某個方法時,可以使用getattr,下面有具體的例子。
例子,如何匯入通過變數匯入math模組
module="math"
mathmodule=__import__(module)
print mathmodule.pow(2,4)
例子,如何通過變數匯入方法,接上邊的**
func="pow"
pow=getattr(mathmodule,func)
print pow(2,4)
乙個使用反射的具體場景:
假如有伺服器a和b,a執行的是集中化任務分發,b接收a給出的任務
a通過queue把任務傳送給b,任務內容是讓b執行math.pow方法,b去queue中獲取任務,此時就必須要使用到反射
在實際應用中,使用的queue應該是訊息佇列伺服器,例如redis,zeromq等伺服器,這裡使用python的queue模組來模擬
定義乙個佇列:
import queue
queue=queue.queue()
定義servera
def servera():
dict=
queue.put(dict)
執行servera函式,將需要執行的任務放入佇列中.servera()定義serverb,b去任務佇列中獲取任務:
def serverb():
task=queue.get()
#首先需要匯入module
if task['server']=='b':
mathmodule=__import__(task['module'])
#其次在module中找到task['func']
func=getattr(mathmodule,task['func'])
print func(2,4)
執行serverb函式, 執行相應的任務.
serverb()
python 反射 python中的反射
什麼是反射?有時我們要訪問某個變數或是方法時並不知道到底有沒有這個變數或方法,所以就要做些判斷。判斷是否存在字串對應的變數及方法。我們知道訪問變數時是不能加引號的,否則會被當成字串處理。如果要通過字串找到對應的變數,那該怎麼辦呢 反射就是用於解決上面兩個問題而產生的,所謂反射,按我的理解就是反過來告...
python中的反射
反射 對於初學python可能較難理解,但反射是非常有用。試想一下,當別的程式傳入給你寫的這段 乙個變數 var math 這個變數是乙個字串,這個字串是乙個模組或者乙個模組下的某個方法,你需要通過變數來匯入此模組或者方法,如何匯入此模組或方法呢,如果直接執行 import var是會出錯的,因為v...
Python中的反射
反射在python中我們可以簡單的理解為通過字串來操作物件的屬性和方法。python中有4個與反射相關的方法 class animal object def init self,name,age self.name name self.age age an animal dog 2 判斷an物件是否...