python什么模块动态调用链接库_python 动态调用模块、类、方法(django项目)
需求:近一段時間基于django框架,開發(fā)各業(yè)務層監(jiān)控代碼,每個業(yè)務的監(jiān)控邏輯不同,因此需要開發(fā)監(jiān)控子模塊,動態(tài)的導入調(diào)用。
項目名稱:demo_django
App:common_base、monitor_master
監(jiān)控子模塊:demo_django/common_base/modules/classname.py
# -*- coding: utf-8 -*-
class classname(object):
def mod1(self):
print "mod1"
def mod2(self):
print "mod2"
備注:模塊名與類名相同
動態(tài)應用模塊: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() # 調(diào)用mod1方法
class LazyImport(object):
"""
動態(tài)導入模塊
"""
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()
總結(jié)
以上是生活随笔為你收集整理的python什么模块动态调用链接库_python 动态调用模块、类、方法(django项目)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: idea terminal中文乱码_Te
- 下一篇: python打开excel表_Pytho