python 不一樣包間模塊引用

python 

 python 類,模塊,包

Python在處理功能複用和功能顆粒度劃分時採用了類、模塊、包的結構。 python

類:類的概念在許多語言中出現,很容易理解。它將數據和操做進行封裝,以便未來的複用。類寫在模塊裏。 app

模塊:一般是一個python文件,定義了某些函數和變量。你在其餘須要這些功能的文件中,導入這模塊,就可重用這些函數和變量。通常用module_name.fun_name,和module_name.var_name進行使用。 函數

包:包對應於文件夾,包含許多模塊。咱們通常將某些功能相近的模塊放在同一個包中。使用包的方式跟模塊也相似,惟一須要注意的是,當文件夾看成包使用時,文件夾須要包含__init__.py文件,主要是爲了不將文件夾名看成普通的字符串。__init__.py的內容能夠爲空,通常用來進行包的某些初始化工做或者設置__all__值,__all__是在from package-name import *這語句使用的,所有導出定義過的模塊。 this

不一樣包間類,函數,變量的引用

目錄以下:

work:#工做目錄
    package1
        __init__.py
        module1.py
            func1()
    package2
        __init__.py
        module2.py
            func2()
    main.py
        main()#主程序

(1) 在module1中調用module2中的func2

     首先須要找到module2,用以下代碼聲明mudule2路徑(實際上是將mudule2路徑加入到sys.path中): spa

#__init__.py

import os
import sys
sys.path.append(os.getcwd()+"\\package2\\module2")
    此時,能夠在module1中調用func2:
#module.py

from package2.module2 import func2

def func1():
    func2()
    print "This is func1"
    ...
注意:此時運行module1會報錯,若查看sys.path可看到咱們添加的路徑變爲..\working\package1\package2\module2,顯然,這個路徑並非module2的路徑,原來錯誤在這裏,那麼到底怎麼回事呢?記得os.getcwd()嗎,它是返回當前運行模塊所在目錄,而咱們運行mudule1,所以...

(2) 在main.py中調用func1:

# main.py
from package1.module1 import func1

def main():
    func1()

if __name__ == "__main__":
    main()
注意:i) 此時從main.py調用func1,並無事先聲明module1的路徑

        ii) 運行main.py, 你猜,程序可以正確運行麼?沒錯,此時,能夠獲得正確的輸出。 code

#假如 func2 的功能是打印一條 「this is func2」

#輸出以下:

This is func2
This is func1

方法(2)

不須要添加路徑,利用__all__,參考博文 字符串

具體操做爲,在每一個包的__init__.py文件中用__all__指定要引用的模塊。如: get

# package1\__init__.py
__all__=["module1"]

#package2\__init__.py
__all__=["module2"]
相關文章
相關標籤/搜索