我很困惑與語法:如何從Python文件中的多個類中導入一個類?
import module.package
from module import package
是否從基準另一個文件夾或者我應該在同一文件中使用它的一類了許多呢?
我很困惑與語法:如何從Python文件中的多個類中導入一個類?
import module.package
from module import package
是否從基準另一個文件夾或者我應該在同一文件中使用它的一類了許多呢?
軟件包是包含名爲__init__.py
的最上層文件的任何目錄。一個模塊是任何擴展名爲.py
的Python文件。
從這些定義中,你可能會發現模塊不能包含包。這是另一種方式;包包含模塊。模塊可以包含的唯一東西是綁定到Python對象(類,函數等)的名稱
導入包時,只需執行__init__.py
文件。導入模塊時,只需執行模塊文件本身即可。使用from package import module
或import package.module
之類的軟件包從模塊中導入模塊時,需要執行軟件包中的__init__.py
和模塊文件本身。
要從模塊只導入一個類,必須使用from X import Y
語句,其中X是[package1.[subpackage2.]]modulename
而Y
是綁定到要導入到名稱的對象的名稱。請注意,即使您進行這種導入,__init__.py
和整個模塊腳本仍會執行。唯一的區別是添加到您的名稱空間的內容,這只是Y
指向的對象。
請注意,from X import Y
聲明有點奇怪。因爲如果X
引用了包,則Y
可引用包中的模塊。爲了克服這種困惑,最好將包和模塊看作命名空間。最大的區別是包是模塊的命名空間,模塊是具體Python對象的命名空間。
這是很好的注意,您可以從一個命名空間中使用逗號導入多個名稱:
from collections import OrderedDict, Counter
,另外,你可以從一個命名空間中導入所有名稱:
from itertools import *
但是,這不被推薦,因爲它不必要地污染了命名空間。對於Python標準庫,大多數都可以,因爲你不太可能與takewhile
之類的東西發生名稱衝突,但是如果你正在處理一個包含多個庫的大型項目,最好保持名稱空間儘可能乾淨以避免衝突。