Python import 匯入模組的時候為什麼引用不了子模組?
阿新 • • 發佈:2018-12-06
問題描述
比如匯入結巴分詞,程式碼如下:
import jieba # 引入母模組
然後直接使用結巴的子模組 posseg 來標註詞性,程式碼如下:
jieba.posseg.cut('中文詞性標註')
這句報異常
AttributeError: 'module' object has no attribute 'posseg'
必須這樣匯入子模組,才能使用:
from jieba import posseg
posseg.cut('中文詞性標註') # 這句正常呼叫
看到常說推薦直接匯入母模組,以防止名稱空間汙染;而且一般如:
from a import b
b.func('中文詞性標註')
這樣格式的程式碼,都能轉為這樣來使用:
import a
a.b.func('中文詞性標註')
但為什麼 jieba 結巴分詞卻不能這樣呢?這是什麼原因呢?
原因
如果 a 是個目錄, b 是個 b.py
檔案, func 是 b.py
裡的函式, a 目錄裡有空的 __init__.py
:
import a # 沒問題
import a.b # 沒問題,會在這一句找 a/b.py
result = a.b.func() # 正常
重來一遍:
import a # 沒問題
result = a.b.func( ) # 不行, a 下面並沒有 b