python什么模块动态调用链接库_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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值