首页 / 知识
Python 之模块重载的五种方法
2023-11-12 13:38:00
python环境准备
新建一个foo文件夹,其下包含一个bar.py文件:
$treefoo
foo
└──bar.py
0directories,1file
bar.py的内容非常简单,只写了个print语句:
print("successfultobeimported")
只要bar.py被导入一次,就被执行一次print。
禁止重复导入由于有sys.modules的存在,当你导入一个已导入的模块时,实际上是没有效果的。
>>>fromfooimportbar
successfultobeimported
>>>fromfooimportbar
>>>
重载模块方法一
如果你使用的python2(记得前面在foo文件夹下加一个__init__.py),有一个reload的方法可以直接使用:
>>>fromfooimportbar
successfultobeimported
>>>fromfooimportbar
>>>
>>>reload(bar)
successfultobeimported
如果你使用的python3那方法就多了,详细请看下面。
重载模块方法二
如果你使用Python3.0->3.3,那么可以使用imp.reload方法:
>>>fromfooimportbar
successfultobeimported
>>>fromfooimportbar
>>>
>>>importimp
>>>imp.reload(bar)
successfultobeimported
但是这个方法在Python3.4+,就不推荐使用了。
:1:DeprecationWarning:theimpmoduleisdeprecatedinfavourofimportlib;seethemodule'sdocumentationforalternativeuses
重载模块方法三
如果你使用的Python3.4+,请使用importlib.reload方法:
>>>fromfooimportbar
successfultobeimported
>>>fromfooimportbar
>>>
>>>importimportlib
>>>importlib.reload(bar)
successfultobeimported
重载模块方法四
如果你对包的加载器有所了解,还可以使用下面的方法:
>>>fromfooimportbar
successfultobeimported
>>>fromfooimportbar
>>>
>>>bar.__spec__.loader.load_module()
successfultobeimported
重载模块方法五
既然影响我们重复导入的是sys.modules,那我们只要将已导入的包从其中移除是不是就好了呢?
>>>importfoo.bar
successfultobeimported
>>>
>>>importfoo.bar
>>>
>>>importsys
>>>sys.modules['foo.bar']
>>>delsys.modules['foo.bar']
>>>
>>>importfoo.bar
successfultobeimported
有没有发现在前面的例子里我使用的都是fromfooimportbar,在这个例子里,却使用importfoo.bar,这是为什么呢?
这是因为如果你使用fromfooimportbar这种方式,想使用移除sys.modules来重载模块这种方法是失效的。
这应该算是一个小坑,不知道的人,会掉入坑中爬不出来。
>>>importfoo.bar
successfultobeimported
>>>
>>>importfoo.bar
>>>
>>>importsys
>>>delsys.modules['foo.bar']
>>>fromfooimportbar
>>>
以上内容为大家介绍了Python之模块重载的五种方法,希望对大家有所帮助,如果想要了解更多Python相关知识,请关注我们http://www.mobiletrain.org/
最新内容
相关内容
python的调用绑定方法和非绑定方法
python的调用绑定方法和非绑定方法,代码,方法,实例,第一,培训,时计,奇数,偶数,参数,定义,在Python中,如果用实例去调用方法,这种限制就被称为PyPython网络编程调用接收数据的三种
Python网络编程调用接收数据的三种方法,数据,代码,基础,通用,通讯,服务,网络,培训,方法,报文,最近在使用python进行网络编程开发一个通用的tcPython标准库之collections模块
Python标准库之collections模块,名字,标准,信息,电话号码,培训,工厂,位置,简介,异常,对象,collections模块简介collections是Python标准库里Python可执行文件和模块
Python可执行文件和模块,标准,培训,模块,文件,属性,上面,内容,变量,函数,源码,python源代码文件按照功能可以分为两种类型:用于执行的可执行程Python切片操作详细例子
Python切片操作详细例子,情况,连续,培训,数据,切片,操作,终点,两者,矛盾,起点,以下示例均以列表a=[0,1,2,3,4,5,6,7,8,9]为例:>>>a=[0,1,2,3,4Python查看模块中的属性
Python查看模块中的属性,名称,标准,环境,培训,属性,模块,对象,函数,定义,变量,内置函数dir可用于列出某模块中定义了哪些属性(全局名称空间)列举Python面向对象中带双下划线的
列举Python面向对象中带双下划线的特殊方法,信息,代码,培训,对象,属性,方法,实例,字符串,里边,内容,__new__:生成实例__init__:生成实例的属性_python之使用inspect模块
python之使用inspect模块,异常,信息,名字,代码,培训,资料,价值,方法,参数,模块,inspect模块提供了一系列函数用于帮助使用自省。下面仅列出较python操作系统接口模块:OS
python操作系统接口模块:OS,管理,工作,工具,系统,服务,培训,模块,文件,目录,函数,OS模块提供了很多与操作系统进行交互的函数,比如常见的使用函Python math 模块
Python math 模块,示例,培训,整数,常量,底数,弧度,模块,正切,余弦,正弦,先来看一下math模块中包含内容,如下所示:>>>importmath>>>dir(math)[__使用Python执行系统命令方法
使用Python执行系统命令方法,系统,信息,培训,标准,命令,方法,模块,操作,终端,中文,Python是一款操作简单的编程语言,内置丰富的库,能够很容易的Python 类的私有属性和方法
Python 类的私有属性和方法,私有化,培训,开头,变量,函数,模块,属性,目的,方法,更多,在Python中,通过单下划线”_”来实现模块级别的私有化,一般