python--反射機制

1、反射機制簡介:python

  經過字符串的形式導入模塊web

  經過字符串的形式,去模塊中尋找指定的函數,並執行框架

  規定用戶輸入格式 模塊名/函數名 經過__import__的形式導入模塊,並經過 hasattr和getattr 檢查並獲取函數返回值。

  相關方法:
    getattr:--根據字符串的形式去某個模塊中尋找東西
    hasattr:--根據字符串的形式去某個模塊中判斷東西是否存在
    setattr:--根據字符串的形式去某個模塊中設置東西
    delattr:--根據字符串的形式去某個模塊中刪除東西函數

2、反射機制初識:

test.py
url

#!/usr/bin/env python # -*- coding:utf-8 -*-

def f1():   return '我是F1,我被調用了'

def f2():   return '我是F2,我被調用了'

def f3():   return '我是F3,我被調用了'

 

index.pyspa

#!/usr/bin/env python # -*- coding:utf-8 -*-
""" 反射機制 1.根據字符串的形式導入模塊。 2.根據字符串的形式去對象(某個模塊)中操做其成員  實現思路:規定用戶輸入格式 模塊名/函數名 經過__import__的形式導入模塊,並經過 hasattr和getattr 檢查並獲取函數返回值。 """
#經過用戶輸入的形式, 導入模塊
inp = input('請輸入須要導入的模塊名:') #__import__用於以字符串的形式導入模塊
dd = __import__(inp) #在模塊尋找函數並執行函數
inp_func = input('請輸入須要執行的函數:') #getattr()用於以字符串的形式去某個模塊中尋找函數
tager_func = getattr(dd, inp_func) #在獲取到的函數名後加()表示執行函數
result = tager_func() print(result)

代碼執行結果:code

請輸入須要導入的模塊名:test 請輸入須要執行的函數:f2 我是F2,我被調用了

 

實例:基於反射模擬Web框架路由系統(一)對象

commons.pyblog

#!/usr/bin/env python # -*- coding:utf-8 -*-

def login():   return 'login'

def logout():   return 'logout'

def nb():   return '很牛逼的網頁'

 

refec_demo.py utf-8

#!/usr/bin/env python # -*- coding:utf-8 -*-
""" 基於反射模擬web框架路由系統 """
from lib import commons url = input('請輸入模擬的url路徑:')   if url.endswith('login'):     ret = commons.login()     print(ret)   elif url.endswith('logout'):     ret = commons.logout()     print(ret)   else:     print('404')

 


實例:基於反射模擬Web框架路由系統(二)

refec_demo1.py

#!/usr/bin/env python # -*- coding:utf-8 -*-
from lib import commons inp = input('請輸入模擬的url路徑:') url_inp = inp.split('/')[-1]   if hasattr(commons, url_inp):     ret = getattr(commons, url_inp)     result = ret()     print(result)   else:     print('404')

代碼實現結果:

路徑正確時結果:

路徑不正確時結果:

 

實例:基於反射模擬Web框架路由系統(三)

manager.py

#!/usr/bin/env python # -*- coding:utf-8 -*-

def home():   return 'Home'

 

order.py

#!/usr/bin/env python # -*- coding:utf-8 -*-

def add_order():   return '添加訂單'

 

refec_demo2.py

#!/usr/bin/env python # -*- coding:utf-8 -*-

#用戶輸入規則:模塊名/函數名
 url = input('請輸入模塊名/函數名:') target_modul, target_func = url.split('/') #__import__導入模塊
mod = __import__('lib.' + target_modul, fromlist=True) #hasattr()判斷函數是否存在
  if hasattr(mod, target_func):     ret = getattr(mod, target_func)     result = ret()     print(result)   else:     print('404')

當模塊和函數都存在時,url路徑調用結果:

當模塊和函數都不存在時,url路徑調用結果:

相關文章
相關標籤/搜索