在Python中,反射的核心本質就是以字符串的形式去導入個模塊,利用字符串的形式去執行函數。
temp = 'sys'
import sys
通常情況下,我們直接用import導入某個模塊,但如果不許用import 直接導入,而要求直接用字符串導入,這就需要用到一個內置函數,看下面的代碼。
temp = 'sys'
model = __import__(temp)
print model.path
我們來設想一下,2個數據庫,一個mysql(主),一個sqlsever,突然在某種情況下,mysql服務器down機了,需要馬上切換到sqlsever上,看下面的代碼,如果運用了反射,就可以直接修改temp的字符串進行簡單快速的修改。
temp = 'mysel'
model = __import__(temp)
model.xxxx #進行對數據庫的操作
再來設想一下,某個url,www.xxxx.com/index/login 這是登陸頁面,www.xxxx.com/index/logout這是登出界面,/ 後字符串的不同返回的結果也不同,這就需要用到反射來簡化,只需要寫入不同的程序,就可以通過url的不同來指向不同的函數方法去執行,這就把繁瑣的問題簡單化了。
data = raw_input('請輸入地址:')
array = data.split('/')
userspance = __import__('function.'+array[0])
model = getattr(userspance,array[0])
func = getattr(model,array[1])
func()