38-包

作者: ju7ran | 来源:发表于2019-04-22 13:44 被阅读0次

    包(Package)

    __all__的作用

    python模块中的all属性,可用于模块导入时限制,如:
    from module import *
    此时被导入模块若定义了all属性,则只有all内指定的属性、方法、类可被导入。
    若没定义,则导入模块内的所有公有属性,方法和类

    sendmsg.py
    
    __all__ = ['stest']
    
    def stest():
        print("stest")
    
    def sstest():
        print("sstest")
        
    ---------------------------------------
    
    infomsg.py
    from sendmsg import *
    stest()
    sstest()
    

    前面我们已经介绍过,包是一种管理模块的手段,采用“包名.子包名.....模块名”的调用形式,非常类似文件系统中的文件目录。但是包不等于文件目录!

    只有包含init.py文件的目录才会被认作是一个包!

    image.png

    上图中的example、p1和p2都是包,因为它们目录内都有__init__.py文件,并且p1和p2是example的子包。

    __init__.py可以是空文件,也可以有Python代码,__init__.py本身就是一个模块,但是要注意,它的模块名是它所在的包名而不是__init__

    举个包和模块之间调用的例子:

    目录结构如下

    image.png

    互相导入示例

    main.py
    from msg import *
    sendmsg.stest()
    
    ----------------------------------------------------------------
    sendmsg.py
    def stest():
        print("stest")
    
    def sstest():
        print("sstest")
    ----------------------------------------------------------------
    __init__.py
    __all__ = ['sendmsg']
    ----------------------------------------------------------------
    
    main.py
    import msg
    msg.infosmsg.test()
    ----------------------------------------------------------------
    infosmsg.py
    def test():
        print("itest")
    ----------------------------------------------------------------
    __init.py
    from . import *
    __all__ = ['infosmsg']
    

    相关文章

      网友评论

        本文标题:38-包

        本文链接:https://www.haomeiwen.com/subject/nreygqtx.html