天天看點

第10.10節 Python使用__init__.py自動加載包下内容

在前面章節老猿介紹了包下子產品及子包的加載的各種方式,并說明包的加載首先是自動加載包下的__init__.py檔案。在《第10.6節 Python包的概念》中介紹了__init__.py檔案的作用主要用于包内子產品的加載,那麼使用__init__.py來加載包的子產品有什麼好處呢?

我們先來看例子,下面例子還是以《第10.7節 Python包的和子包定義步驟》中規劃的包為基礎來介紹的,本節唯一的變化是包goodspricequery的__init__.py增加了兩行增加注釋的内容,如下:

我們執行包goodspricequery的加載:

執行截圖:

第10.10節 Python使用__init__.py自動加載包下内容

從上述執行來看,通過包的__init__.py使用import *加載的包下和子包下的子產品成員,都可以通過“包名.成員”方式進行通路,這樣對外提供能力時,調用者無需關注提供能力的子產品是哪個,相關功能都認為是包的功能,此時的包對調用者來說就跟一個獨立的子產品檔案一樣。

類似的,凡是導入後屬于調用者無需加包名和子產品名就可以通路的導入方法如“from 包名.子產品名 import 成員 ”、“import 包名.子包名.子產品名 as 子產品别名”等,相關的導入子產品屬性或子產品本身都可以通過“包名.”方式通路。

本節介紹的通過包的__init__.py特定的導入方法導入的内容,都可以通過”包名.”方法通路,而無需關注相關屬性的子產品檔案或子封包件,展現了一個包作為一個整體提供服務的能力。