python动态加载模块_菜鸟世界 -python动态加载模块

#coding=utf-8

def add_attr(obj):

obj['a'] = 'a'

add_attrB.py的内容

#coding=utf-8

def add_attr(obj):

obj['b'] = 'b'

main.py

#coding=utf-8

import add_attrA

import add_attrB

obj = {}

def add_attr():

add_attrA.add_attr(obj)

add_attrB.add_attr(obj)

add_attr()

print obj

在main脚本里,要导入两个模块,如果后来又增加了一个add_attrC.py这个脚本,就不得不修改main.py的内容,增加一行代码 import add_attrC

那么,能不能不在main.py里这样费力的导入模块呢,毕竟每次新增一个add_attr脚本,都要需改main。

2、 __import__

__import__ 是python的内置函数,import 就是用它工作的,想要实现动态加载,可以通过__import__来实现

修改main.py代码

#coding=utf-8

import os,glob

obj = {}

files = glob.glob('add_attr*.py')

for filename in files:

module_name,ext = os.path.splitext(os.path.basename(filename))

moudle = __import__(module_name)

moudle.add_attr(obj)

print obj

模块的加载,不需要事先知道有多少个模块,如果新增一个add_attrC.py 文件,main脚本可以自动加载使用。

有一处需要特别说明,这样的加载方式只能加载main.py所在的文件夹下的模块,如果这些模块不和main.py在同一个目录下,刚才的这段代码就不能正确执行了,必须使用

sys.path.append 将目标目录添加到python的搜索路径中,这样就可以正常工作了

sys.path是一个list,里面存放的是python的搜索目录。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值