[英]What is the scope of imports defined in the package __init__.py file?
對於一個項目,我不得不從C ++切換到python,但是在完全理解__init__.py
文件時遇到了一些麻煩。 我在__init__.py
文件中找到了以下文檔:
為了更熟悉__init__.py
文件的工作方式,我在python 2.7和3.6.5中都進行了一些測試。 我為此使用了“ PythonCentral”測試包(請參見鏈接2):
現在,我了解了有關__init__.py
文件的以下內容:
__init__.py
文件。 __init__.py
可用於重載__all__
方法包。 __init__.py
可用於定義導入順序 __init__.py
可用於使類在包和子包級別可用。 如文檔中所述,似乎使用了主文件范圍內的不同模塊和類。 但是,當嘗試使用另一個子包模塊中定義的類時,我遇到了麻煩。 在python 2.7中,在subanimals子包中創建了以下__init__.py
文件:
from Mammals import Mammals
print "subpackage __init__.py executed"
接下來,我在Bird.py模塊內創建了以下代碼:
class Birds:
def __init__(self):
''' Constructor for this class. '''
# Create some member animals
self.members = ['Sparrow', 'Robin', 'Duck']
def printMembers(self):
print('Printing members of the Birds class')
for member in self.members:
print('\t%s ' % member)
test = Mammals()
test.printMembers
運行以下主要主要腳本時:
from animals.subanimals import Birds
test = Birds()
test.printMembers()
我不斷得到未定義的哺乳動物的全局名稱。 我可以在python 2.7中解決此問題,方法是從“哺乳動物”中將“導入哺乳動物”添加到Birds.py的頂部。
__init__.py
是否僅在主腳本的作用域級別上導入包和類,因此不導入Birds.py模塊內部,還是我做錯了其他事情?
我的問題的答案可以在@jonrsharpe的評論中找到。
每個單獨的文件都必須有效,並定義所有適當的導入。 init .py用於將目錄中的多個文件聚合到一個模塊中; 可以將其視為將屬性分組並傳遞給父級,而不是傳遞給該目錄中的其他文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.