反射的本質:
反射就是通過字串的形式,匯入模組;通過字串的形式,去模組尋找指定函式,並執行。利用字串的形式去物件(模組)中操作(查詢/獲取/刪除/新增)成員,一種基於字串的事件驅動!
下面我們通過反射機制在web路由上的應用來介紹反射
首先我們來看如下**的設計:
users.py 模組中**
visit模組中的**:
執行結果:
從執行結果可以看到我們訪問到了login()函式中的內容,但是如果我們有許許多多個這樣的函式,該怎麼辦呢,總不能寫許多個elif進行條件判斷吧,所以我們就可以介紹反射,通過輸入指定的字串來動態的獲取需要使用的函式。
這裡我們將介紹getattr(),hasattr() 兩個函式的使用方法
**如下:
函式hasattr(object,str) 將接受兩個引數,第乙個為要訪問的模組(或者物件)名,第二個引數是乙個字串(切記),並通過判斷users模組中是否有我們需要訪問的內容,如果有 返回true,沒有則返回false並執行else**塊。
getatttr()函式引數與上面相同,作用是我們尋找到users模組中函式名為inp的函式,並且把此函式的記憶體位址賦值給fun,進而進行呼叫。這樣就解決了要不停的elif的尷尬。
補充:
以上是解決的多個函式內容的動態呼叫,但是在生產環境下,我們避免不了要對多個模組中的內容進行動態呼叫。類似於這樣:
接下來我們介紹import() 方法對模組進行動態呼叫。
執行結果如下:
python反射機制
本文總結python的反射機制,以及其簡單應用 首先要說的是globals 函式 在沒有任何模組匯入的情況下,執行globals函式,函式返回的是乙個包含當前作用域的全域性變數的字典,key是全域性範圍內物件的名字。globals 然後先導入乙個模組 os 在執行globals函式 import o...
python反射機制
根據不同的場景執行不同的函式,可以將這種寫入配置中,讀取配置,執行對應的函式,這個時候獲取的函式為字串,如何執行該字串呢?反射就是通過字串的形式,匯入模組 反射就是通過字串的形式,匯入模組 通過字串的形式,去模組尋找指定函式,並執行。利用字串的形式去物件中操作屬性或者函式利用字串的形式去物件中操作屬...
python 反射機制
反射就是通過字串的形式,匯入模組 通過字串的形式,去模組尋找指定函式,並執行。利用字串的形式去物件 模組 中操作 查詢 獲取 刪除 新增 成員,一種基於字串的事件驅動!1.getattr 函式是python自省的核心函式,具體使用大體如下 class a def init self self.nam...