scheduler_class = globals()[scheduler_class_name]
Python 中一種 動態獲取類對象 的常用技巧,屬于 反射(reflection) 編程的范疇
globals() | Python 內置函數,返回一個?字典(dict),包含當前模塊(文件)中所有全局變量、函數、類、導入的模塊等的名稱和對象。 |
[scheduler_class_name] | 從?globals() ?返回的字典中,以字符串?scheduler_class_name ?為鍵,查找對應的值。 |
scheduler_class_name | 一個字符串變量,比如?"DDPMScheduler" ?或?"DPMSolverMultistepScheduler" 。 |
用法示例
from diffusers import DDPMScheduler, DDIMScheduler, DPMSolverMultistepScheduler# 假設這是從配置文件讀取的類名
scheduler_class_name = "DPMSolverMultistepScheduler"# 動態獲取類
scheduler_class = globals()[scheduler_class_name]# 現在 scheduler_class 就是 DPMSolverMultistepScheduler 這個類
print(scheduler_class) # <class 'diffusers.DPMSolverMultistepScheduler'># 可以用來創建實例
scheduler = scheduler_class.from_config(config)
如果不用global():
if scheduler_class_name == "DDPMScheduler":scheduler_class = DDPMScheduler
elif scheduler_class_name == "DDIMScheduler":scheduler_class = DDIMScheduler
elif scheduler_class_name == "DPMSolverMultistepScheduler":scheduler_class = DPMSolverMultistepScheduler
else:raise ValueError(f"Unknown scheduler: {scheduler_class_name}")
這樣寫冗長、難維護,每新增一個調度器就要改代碼