需求:需要通過動態變數名,取得對應的值。
例如,定義有如下類(也許是自己設計的表結構不合理),時不時需要獲取或設定變數 env_* 變數的值然後更新資料庫,所以急需使用變數名的變數,要不就需要寫一堆判斷語句:
# 發布單 model
class
order
(models.model)
: current_env = models.integerfield(default=0)
# 0:剛新建,1-5:對應測試環境/生產環境等等
env_1 = models.integerfield(default=0)
# 環境間流轉狀態,0:沒開始,1:待發布,2:已發布
env_2 = models.integerfield(default=0)
env_3 = models.integerfield(default=0)
env_4 = models.integerfield(default=0)
env_5 = models.integerfield(default=
0)
使用python自帶的 getattr()、setattr()方法
# 過濾剛新建還沒流轉的發布單
orders = order.objects.
all(
).exclude(env_1=
0, env_2=
0, env_3=
0, env_4=
0, env_5=0)
for order in orders:
env_id = order.current_env
env_name = environment.objects.
filter
(env_id=env_id)[0
].env_name
# 變數名的變數,使得反射技術,
arg_name =
"env_"
+str
(env_id)
arg_name_value =
getattr
(order, arg_name)
## 獲取到值
## setattr(order, arg_name, 2) ## 設定對應的值
python 反射和動態載入 Python的反射
什麼是反射 反射是乙個很重要的概念,它可以把字串對映到例項的變數或者例項的方法然後可以去執行呼叫 修改等操作。它有四個重要的方法 getattr 獲取指定字串名稱的物件屬性 setattr 為物件設定乙個物件 hasattr 判斷物件是否有對應的物件 字串 delattr 刪除指定屬性 attr是屬...
使用反射動態建立型別例項
net中除了建構函式外,還有多種方式可以建立型別的例項。下面總結了幾種常見的通過反射建立型別例項的方法。假設我們需要建立有這樣乙個型別的例項 public class employee public employee string name public employee public void s...
七 使用反射動態匯入模組
一 動態匯入模組 利用反射動態匯入模組 執行模組中的函式 imp input 請輸入你想匯入的模組名 cc import imp 這種方式就是通過輸入字串匯入你所想匯入的模組 cc.f1 執行模組中的f1方法 print imp input 請輸入模組 dd import imp 等價於import...