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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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项目)的主要内容,如果未能解决你的问题,请参考以下文章

VB中调用Class(类模块)及调用DLL(动态链接库)问题

动态加载模块,python反射机制

java动态载入指定的类或者jar包反射调用其方法

python_django_urls模块与views模块请求访问过程

17有关python面向对象编程的提高多继承多态类属性动态添加与限制添加属性与方法@property

常用的python模块及安装方法