首页 > 代码库 > python 动态调用模块、类、方法(django项目)

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

 

python 动态调用模块、类、方法(django项目)