zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    CF492B
    CF570B
    CF401C
    CF1190B
    CF413C
    CF486B
    CF976B
    NOIP 2020 解题报告
    状态压缩DP
    区间DP
  • 原文地址:https://www.cnblogs.com/shhnwangjian/p/5955130.html
Copyright © 2011-2022 走看看