簡體   English   中英

包__init__.py文件中定義的導入范圍是什么?

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

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