![](/img/trans.png)
[英]Python best practice for importing grandparent module in parent and child modules
[英]Importing Parent Module and the Child Module
我正在測試這個名為hello.py的模塊。
#!/usr/bin/python
import os
class hello():
def say(self):
print "Hello"
我有這個測試腳本。
#!/usr/bin/python
import hello
print os.listdir( '/tmp' )
測試腳本抱怨'os'沒有定義。 為了使這項工作,我需要在測試腳本中執行'import os'。
我不明白的是我已經導入了已導入os的hello.py。 測試腳本不應該知道通過導入hello.py,它已經導入了os?
它確實導入了os
,但對os
模塊的引用位於hello
模塊的命名空間中。 因此,例如,您可以在測試腳本中編寫此代碼:
import hello
print hello.os.listdir('/tmp')
不,Python模塊不能以這種方式工作。 通過使用import
將一個模塊導入另一個模塊,可以在調用模塊的命名空間中設置導入模塊的名稱。 這意味着您通常不希望在調用模塊中將任何其他目的使用相同的名稱。
通過將import os
隱藏在模塊中,Python允許調用腳本(在您的情況下為測試腳本)來決定它想要導入到自己的命名空間中的內容。 這是可能的調用腳本說os = "hello world"
,並用它作為無關的標准可變os
模塊。
這是事實,該os
模塊僅加載一次。 剩下的唯一問題是每個模塊中名稱os
的可見性。 對於同一模塊不止一次導入,沒有(好的,可忽略的)性能影響。 模塊初始化代碼僅在第一次導入模塊時運行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.