python中的包

  包将有联系的模块组织在一起,可以避免模块名称冲突问题,让应用组织结构更加清晰

  假定我们的包的例子有如下的目录结构:

Phone/
    _init_.py
    common_util.py
    Voicedta/
        _init_.py
        Post.py
        Isdn.py
    Fax/
        _init_.py
        G3.py
    Mobile/
        _init_.py
       Analog.py
       igital.py
    Pager/
        _init_.py
        Numeric.py

  Phone是最顶层的包,Voicedta等是它的子包,可以这样导入子包,如下:

import Phone.Mobile.Analog
Phone.Mobile.Analog.dial()

  也可以使用from-import实现不同需求的导入

  第一种方法只是导入顶层的子包,然后使用属性/点操作符向下引用子包树:

from Phone import Mobile
Mobile.Analog.dial('555-1212')

  此外,还可以引入更多的子包

from Phone.Mobile import Analog
Analog.dial("555-1212")

  事实上,可以一直沿子包的树状结构导入

from Phone.Mobile.Analog import dial
dial("555-1212")

  在上边的目录结构中,有很多_init_.py文件。这些是初始化模块,from-import语句导入子包时需要用到它。如果没有用到,可以说是空文件。

  包同样支持 from-import all 语句

from package.module import *

  然而,这样的语句会导入哪些文件取决于操作系统的文件系统。所以在_init_.py中加入_all_变量。该变量包含执行这样的语句时一个个导入的模块的名字。它由一个模块名字符串列表组成。

 

posted @ 2018-10-05 08:37  FlameLuo  阅读(219)  评论(0编辑  收藏  举报