簡體   English   中英

導入父模塊和子模塊

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM