python模块重载的方法有哪些?要注意什么?

Admin 2021-08-28 群英技术资�

    这篇文章主要介绍python模块重载的方法,下文给大家分享了python模块重载的五种方法,对大家学习和python模块重载具有一定的帮助,感兴趣的朋友可以参考下,接下来我们一起了解看看吧�

    新建一� foo 文件夹,其下包含一� bar.py 文件

$ tree foo
foo
└── bar.py

0 directories, 1 file

    bar.py 的内容非常简单,只写了个 print 语句

print("successful to be imported")

    只要 bar.py 被导入一次,就被执行一� print

    禁止重复导入

    由于� sys.modules 的存在,当你导入一个已导入的模块时,实际上是没有效果的�

>>> from foo import bar
successful to be imported
>>> from foo import bar
>>>

    重载模块方法一

    如果你使用的 python2(记得前面在 foo 文件夹下加一� __init__.py),有一� reload 的方法可以直接使�

>>> from foo import bar
successful to be imported
>>> from foo import bar
>>>
>>> reload(bar)
successful to be imported
<module 'foo.bar' from 'foo/bar.pyc'>

    如果你使用的 python3 那方法就多了,详细请看下�

    重载模块方法�

    如果你使� Python3.0 -> 3.3,那么可以使� imp.reload 方法

>>> from foo import bar
successful to be imported
>>> from foo import bar
>>>
>>> import imp
>>> imp.reload(bar)
successful to be imported
<module 'foo.bar' from '/Users/MING/Code/Python/foo/bar.py'>

    但是这个方法� Python 3.4+,就不推荐使用了

<stdin>:1: DeprecationWarning: the imp module is deprecated in favour of importlib; 
see the module's documentation for alternative uses

    重载模块方法�

    如果你使用的 Python 3.4+,请使用 importlib.reload 方法

>>> from foo import bar
successful to be imported
>>> from foo import bar
>>>
>>> import importlib
>>> importlib.reload(bar)
successful to be imported
<module 'foo.bar' from '/Users/MING/Code/Python/foo/bar.py'>

    重载模块方法�

    如果你对包的加载器有所了解

    还可以使用下面的方法

>>> from foo import bar
successful to be imported
>>> from foo import bar
>>>
>>> bar.__spec__.loader.load_module()
successful to be imported
<module 'foo.bar' from '/Users/MING/Code/Python/foo/bar.py'>

    重载模块方法�

    既然影响我们重复导入的是 sys.modules,那我们只要将已导入的包从其中移除是不是就好了呢�

>>> import foo.bar
successful to be imported
>>>
>>> import foo.bar
>>>
>>> import sys
>>> sys.modules['foo.bar']
<module 'foo.bar' from '/Users/MING/Code/Python/foo/bar.py'>
>>> del sys.modules['foo.bar']
>>>
>>> import foo.bar
successful to be imported

    有没有发现在前面的例子里我使用的都是 from foo import bar,在这个例子里,却使� import foo.bar,这是为什么呢�

    这是因为如果你使� from foo import bar 这种方式,想使用移除 sys.modules 来重载模块这种方法是失效的�

    这应该算是一个小坑,不知道的人,会掉入坑中爬不出来�

>>> import foo.bar
successful to be imported
>>>
>>> import foo.bar
>>>
>>> import sys
>>> del sys.modules['foo.bar']
>>> from foo import bar
>>>

    关于python模块重载的方法就介绍到这,本文实例有一定的借鉴价值,有这方面学习需求的朋友可以参考学习,希望能对大家有帮助,想要了解更多python模块重载的相关内容,大家可以关注其他文章�

文本转载自脚本之�

标签� python模块重载

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:[email protected]进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容�

猜你喜欢

群英网络开启智能安全云计算之旅

注册领取新人大礼�
专业资深工程师驻�
7X24小时快速响�
一站式无忧技术支�
免费备案服务

联系我们

24小时售后 24小时售后TEL�0668-2555666 售前咨询TEL�400-678-4567 投诉建议TEL�0668-2555999 投诉建议邮箱:t[email protected] 信息安全TEL�0668-2555118 域名空间客服 公司总机�0668-2555555 公司传真�0668-2555000
免费拨打  400-678-4567
免费拨打  400-678-4567 免费拨打 400-678-4567 � 0668-2555555
在线客服
微信公众号
返回顶部
返回顶部 返回顶部