python 動態調用模塊、類、方法(django項目)


需求:近一段時間基於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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM