已合并類型庫中的信息至C++類,以便描述COM接口。在編程中,我們經(jīng)常需要處理這種類型庫導(dǎo)入操作。這篇文章將介紹如何使用#import指令來導(dǎo)入類型庫,并對其進(jìn)行必要的說明。
使用#import指令導(dǎo)入類型庫時,需要指定要導(dǎo)入的類型庫文件名。這個文件名可以是.olb、.tlb或.dll文件。例如,在訪問數(shù)據(jù)庫時常用的msado15.dll就是一個典型的例子。還可以指定類型庫中的progid或libid來導(dǎo)入。需要注意的是,在使用64位操作系統(tǒng)的交叉編譯器編譯時,該編譯器可能只能讀取32位注冊表配置。建議使用本地64位編譯器編譯并注冊64位類型共享庫。如果不指定版本或lcid,則默認(rèn)使用progid的規(guī)則進(jìn)行導(dǎo)入。還可以導(dǎo)入可執(zhí)行文件(.exe)、包含類型庫的庫文件(例如包含類型庫資源的.ocx的.dll文件)、符合文件的保留類型庫以及可由LoadTypeLib API理解的其他文件格式。
下面我們來討論一個關(guān)于Python模塊導(dǎo)入的示例。假設(shè)存在一個名為IsDir的目錄,其中包含多個模塊(如A、B、C、D)和一個__init__.py文件。當(dāng)我們想要調(diào)用這些模塊時,有幾種方法可以實(shí)現(xiàn)。如果__init__.py文件為空,那么我們可以直接從IsDir目錄中導(dǎo)入模塊A、B、C和D。例如,我們可以使用from IsDir import A、B、C和D的方式來分別導(dǎo)入各個模塊并調(diào)用其函數(shù)。我們還可以使用import語句加上模塊的名稱來導(dǎo)入它們,然后通過IsDir目錄來訪問這些模塊。但需要注意的是,如果直接執(zhí)行import IsDir而沒有指定具體的模塊名稱,那么將無法成功導(dǎo)入其中的模塊A、B、C和D。這是因?yàn)楫?dāng)__init__.py文件為空時,Python無法知道需要導(dǎo)入哪些模塊。在調(diào)用這些模塊之前,我們需要明確指定要導(dǎo)入的模塊名稱。從官方文檔中可以了解到,如果沒有在__init__.py文件中定義__all__列表,那么使用from IsDir import 語句將無法導(dǎo)入IsDir目錄下的所有模塊。在調(diào)用模塊時需要確保正確指定了要導(dǎo)入的模塊名稱。
一、關(guān)于Python模塊導(dǎo)入的正確方式
只有執(zhí)行如上文所示的代碼,才能正確進(jìn)行操作,否則可能會出現(xiàn)錯誤。官方說明,在使用`importIsDir.A`時,它本身并沒有任何意義,只有緊接著執(zhí)行`fromIsDirimport`后,`importIsDir.A`語句中的`moduleA`才會被定義。完整的調(diào)用應(yīng)該為:
1. 首先導(dǎo)入模塊:`import IsDir.A`
2. 從IsDir中導(dǎo)入所有模塊:`from IsDir import `
二、關(guān)于init.py文件的使用
在Python的包(package)中,init.py文件用于指定該包下可以被導(dǎo)入的模塊。例如,在CatIsDir目錄下,init.py文件可以包含以下內(nèi)容:
init.py文件內(nèi)容如下:
`__all__=["A","B"]`
然后可以這樣使用:
使用腳本示例:
```python
#!/usr/bin/env python
from IsDir import
A.say()
B.say()
```
運(yùn)行上述腳本,將輸出:
`This is module A!`
`This is module B!`
錯誤實(shí)例:
如果嘗試執(zhí)行如下代碼:
```python
#!/usr/bin/env python
from IsDir import
C.say()
```
將會出錯,因?yàn)镃并未在init.py文件的`__all__=["A","B"]`中定義。這說明,init.py文件中的`__all__=[]`具有隔離模塊的作用。
三、關(guān)于模塊A、B、C、D的方法定義
以模塊A為例,它的代碼可能如下:
在CatIsDir目錄下的A.py文件:
```python
def say():
print "This is module A!"
``` 類似地,其他模塊也會有相應(yīng)的方法定義。
四、關(guān)于import的詞義解析