[TOC]
# `__init__.py`
如果創建一個包,要在這個包下面創建`__init__.py`文件
指定對外界提供的模塊列表
在`__init__.py`中寫入文件名
~~~
__all__ = ["sendMsg", "recvMsg"]
~~~
表示這個包下的這2個文件會被from
使用from 文件夾import 模塊的方式導入

包將有聯系的模塊組織在一起,即放到同一個文件夾下,并且在這個文件夾創建一個名字為__init__.py文件,那么這個文件夾就稱之為包
有效避免模塊名稱沖突問題,讓應用組織結構更加清晰
上面是影響的`form xx import xx`
如果在`__init__.py`中寫
~~~
__all__ = ["sendMsg"]
form . import sendMsg
~~~
影響的是import
表示可以用文件夾名.文件名
`__init__.py`為空
僅僅是把這個包導入,不會導入包中的模塊
總結:
* `__all__`只能是from-import
* `form . import sendMsg`這種是import
# 編寫內容
可以在這個文件中編寫語句,當導入時,這些語句就會被執行
`__init__.py`文件


# 嵌套的包
假定我們的包的例子有如下的目錄結構:
~~~
Phone/
__init__.py
common_util.py
Voicedta/
__init__.py
Pots.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__變量。該變量包含執行這樣的語句時應該導入的模塊的名字。它由一個模塊名字符串列表組成.。
- python入門
- 軟件安裝
- anaconda使用
- py解釋器
- 數據類型和變量
- 編碼
- 字符串
- 格式化
- 數據類型
- 運算符
- list和tuple
- 列表生成式
- dict和set
- 切片和迭代
- set,list,tuple之間互換
- is和==
- 公共方法
- 反射操作
- 數學運算
- 類型轉換
- 對象操作
- 序列操作
- 運算符
- 內置函數
- 交互操作
- 編譯執行
- 引用
- 判斷,循環
- 生成器
- 迭代器
- 函數
- 數據類型轉換
- 空函數
- 參數
- 全局變量
- 返回值
- 遞歸
- 匿名函數
- 文件操作
- 打開和關閉
- 讀寫
- 備份文件
- 文件定位讀寫
- 重命名,刪除
- 文件夾相關操作
- with
- StringIO和BytesIO
- 操作文件和目錄
- 序列化
- 文件屬性
- 面向對象
- 類和對象
- init()方法
- 魔法方法
- 繼承
- 重寫
- 多態
- 類屬性,實例屬性
- 靜態方法和類方法
- 工廠模式
- 單例模式
- 異常
- 私有化
- 獲取對象信息
- *args和**kwargs
- property屬性
- 元類
- slots
- 定制類
- 枚舉
- 模塊
- 模塊介紹
- 模塊中的__name__
- 模塊中的__all__
- 包
- 模塊發布
- 模塊的安裝和使用
- 多模塊開發
- 標準庫
- 給程序傳參數
- 時間
- 正則表達式
- GIL
- 深拷貝和淺拷貝
- 單元測試
- pyqt
- 安裝
- 設置窗口圖標和移動窗口
- 設置氣泡提示和文本
- 圖片展示
- 文本框控件
- 按鈕控件
- 信號和槽
- 布局
- 對話框控件
- pygame
- 窗體關閉事件
- 顯示圖片
- 移動圖片
- 文本顯示
- 背景音和音效
- FPS計算
- surface
- 鼠標事件
- 函數式編程
- map/reduce
- filter
- sorted
- 返回函數
- 裝飾器
- 偏函數
- 網絡編程
- tcp
- udp
- socket
- epoll
- WSGI
- 多任務
- 多線程
- 多進程
- 分布式進程
- 協程
- 迭代器
- 生成器
- yield多任務
- greenlet
- gevent
- ThreadLocal
- asyncio
- async/await
- aiohttp
- 常用內建模塊
- datetime
- collections
- base64
- struct
- hashlib
- hmac
- itertools
- urllib
- xml
- HTMLParser
- 常用第三方模塊
- pillow
- requests
- chardet
- psutil
- 圖形界面
- 海龜繪圖
- Django
- 虛擬環境搭建
- ORM
- 模型類設計和表生成
- 模型類操作
- 關系查詢
- 后臺管理
- 配置mysql
- 字段屬性和選項
- 查詢
- 模型關聯
- 路由
- 模板
- selenium
- 基本原理
- api
- 八種定位方式
- 元素的操作
- 多標簽
- 多表單
- 鼠標,鍵盤
- 警告框
- 下拉框
- 執行js
- 等待
- cookie
- 封裝
- unittest模塊
- 斷言
- 測試用例
- jmeter
- jmeter簡介
- jmeter提取json
- 添加header和cookie
- 讀取csv/txt文件
- 配置文件
- ant