需求:近一段時間基於django框架,開發各業務層監控代碼,每個業務的監控邏輯不同,因此需要開發監控子模塊,動態的導入調用。
項目名稱:demo_django
App:common_base、monitor_master
監控子模塊:demo_django/common_base/modules/classname.py
# -*- coding: utf-8 -*- class classname(object): def mod1(self): print "mod1" def mod2(self): print "mod2"
備注:模塊名與類名相同
動態應用模塊:demo_django/common_base/module_partiton.py
def test(): clsname = "classname" method = "mod1" importmodule = LazyImport("monitor_base.modules." + clsname, clsname) # 導入classname模塊 is_true = hasattr(importmodule, clsname) # 檢查classname類是否在classname模塊中 if is_true: classname = getattr(importmodule, clsname) obj = classname(self.hostlist, self.way) # 實例化classname類 mtd = getattr(obj,method) mtd() # 調用mod1方法 class LazyImport(object): """ 動態導入模塊 """ def __init__(self, module_name, module_class): """ :param module_name: :param module_class: :return: 等同於 form module_name import module_class """ self.module_name = module_name self.module_class = module_class self.module = None def __getattr__(self, name): if self.module is None: self.module = __import__(self.module_name, fromlist=[self.module_class]) return getattr(self.module, name) if __name__ == '__main__': test()
參考:http://www.cnblogs.com/bluefrog/archive/2012/05/11/2496439.html