反射的應用

2021-08-11 07:57:20 字數 1987 閱讀 6149

#demo.py中的程式

#!/usr/bin/env python

#coding:utf-8

deffoo

():print

"demo.foo"

#主程式

#!/usr/bin/env python

#coding:utf-8

str1 = 'demo'

str2 = 'foo'

module = __import__(str1) # == import demo

funk = getattr(module, str2)

#getattr相當於房戶戶demo模組中的foo函式

funk()

#可以看到getater就是找到foo函式,並且賦給funk函式。

結果:demo.foo

#account.py檔案

#!/usr/bin/env python

#coding:utf-8

#登入**相關檔案

deflogin

():print

'login'

deflogout

():print

'logout'

#index.py檔案

#!/usr/bin/env python

#coding:utf-8

from backend import account

data = raw_input("請輸入url:")

array = data.split('/')

if data == 'accout/login':

account.login()

elif data == 'account/logout':

account.logout()

#這裡我們的大型**如果有100個url是不是我們要寫100個if呢,這裡我們就可以用反射動態獲取。在下面介紹

#這裡admin.py和account.py都時我們url的乙個分頁面

#admin.py檔案

#!/usr/bin/env python

#coding:utf-8

defindex

():print

'歡迎登陸後台管理'

#account.py檔案

#!/usr/bin/env python

#coding:utf-8

#登入**相關檔案

deflogin

():print

'login'

deflogout

():print

'logout'

#index.py檔案

#!/usr/bin/env python

#coding:utf-8

data = raw_input("請輸入url:")

array = data.split('/')

userspance = __import__('backend.'+array[0])

model = getattr(userspance, array[0])

func = getattr(model, array[1])

#相當於先導入乙個資料夾,在資料夾中在匯入那個模組,在執行函式。

#這裡__import__ 相當於先導入import backend.account,然後在匯入模組,在執行login()函式,也就是跟正常的沒有區別,先import backend,然後backend.account,然後在backend.account.login

#這裡我們正常匯入模組時 import bachend.account ,執行的時候是使用backend.account.login(),所以我們這裡在使用兩次次getattr,這下應該差不多明白了

func()

#一次執行結果:

請輸入url:admin/index

歡迎登陸後台管理

go 反射應用

直接上 package main import fmt reflect type envkey struct func main 反射 s reflect.valueof t elem typeoft s.type 迴圈遍歷結構體,獲取各個元素的型別,值 for i 0 i s.numfield i...

go 反射應用

package main import fmt encoding json type monster struct func main data,json.marshal m fmt.println json result string data 輸出結果 json result 思考問題 為什麼序...

php反射應用場景 詳解php中反射的應用

反射是在php執行狀態中,擴充套件分析php程式,匯出或提取出關於類 方法 屬性 引數等的詳細資訊,包括注釋。這種動態獲取的資訊以及動態呼叫物件的方法的功能稱為反射api。反射是操縱物件導向范型中元模型的api,其功能十分強大,可幫助我們構建複雜,可擴充套件的應用。其用途如 自動載入外掛程式,自動生...