考慮下面的目錄結構,文件和Python版本是Python 3的進口異常
parent
├── __init__.py
├── mod1.py
├── mod2.py
└── mod3.py
內容,
$ cat __init__.py
from . import mod1
hello = "parent Hello"
$ cat mod1.py
from . import mod2
hello = "parent.mod1 Hello"
$ cat mod2.py
hello = "parent.mod2 hello"
$ cat mod3.py
hello = "parent.mod3 Hello"
$ python3 -V
Python 3.5.2
在交互式會話我得到以下行爲
現在,
>>> import parent
>>> parent.mod1
<module 'parent.mod1' from '/home/codeman/mydata/local/tmp/parent/mod1.py'>
>>> parent.mod2
<module 'parent.mod2' from '/home/codeman/mydata/local/tmp/parent/mod2.py'>
>>> parent.mod3
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: module 'parent' has no attribute 'mod3'
爲什麼parent.mod2
可以訪問,當我只導入了mod1
t他parent/__int__.py
文件? (是否是一個錯誤?)
我知道AttributeError與parent.mod3
發生,因爲只有__init__.py
文件中導入的模塊在使用import parent
語法明確導入父項時纔可訪問。
'mod2'是可以訪問的,因爲你在'mod1'中導入了它 – vaultah
@vaultah不應該只在'parent.mod1'中可見?我沒有將它導入'__init __。py'中。 – codeman48
簡短的回答是:它在哪裏輸入並不重要。 'mod2'屬性被添加到「共享」的「父」模塊對象中。如果你有'父'對象,你可以在任何地方訪問'mod2'屬性。 – vaultah