Zanurkuj w Pythonie/Pakiety: Różnice pomiędzy wersjami
Usunięta treść Dodana treść
tłumaczenie |
Nie podano opisu zmian |
||
Linia 13:
# Tę składnię nie widzieliśmy wcześniej. This is a syntax you haven't seen before. Wygląda to niemal, jak <tt>from module import</tt>, który znamy i kochamy, ale z "." wygląda na coś wyższego i innego niż proste <tt>import</tt>. Tak na prawdę <tt>xml</tt> jest czymś, co jest znane pod nazwą ''pakiet'' (ang. ''package''), <tt>dom</tt> jest zagnieżdżonym pakietem wewnątrz <tt>xml</tt>-a, a <tt>minidom</tt> jest modułem znajdującym się wewnątrz <tt>xml.dom</tt>.
Brzmi to skomplikowanie, ale tak naprawdę nie jest. Jeśli zobaczymy na konkretną implementacją, może nam to pomóc. Pakiet to niewiele więcej niż katalog z modułami, a zagnieżdżone pakiety to podkatalogami.
'''Przykład 9.6. Plikowa struktura pakietu'''
<span>Python21/ root Python installation (home of the executable)
Linia 34 ⟶ 33:
'''Przykład 9.7. Pakiety także są modułami'''
>>> from xml.dom import minidom #(1)
>>> minidom
<module 'xml.dom.minidom' from 'C:\Python21\lib\xml\dom\minidom.pyc'>
>>> minidom.Element
<class xml.dom.minidom.Element at 01095744>
>>> from xml.dom.minidom import Element #(2)
>>> Element
<class xml.dom.minidom.Element at 01095744>
>>> minidom.Element
<class xml.dom.minidom.Element at 01095744>
>>> from xml import dom #(3)
>>> dom
<module 'xml.dom' from 'C:\Python21\lib\xml\dom\__init__.pyc'>
>>> import xml #(4)
>>> xml
<module 'xml' from 'C:\Python21\lib\xml\__init__.pyc'>
#
# Tutaj importujesz klasę (<tt>Element</tt>) z modułu (<tt>minidom</tt>), a ten moduł z zagnieżdżonego pakietu (<tt>xml.dom</tt>). W wyniku tego <tt>Element</tt> został zaimportowany bezpośrednio do twojej przestrzeni nazw. Dodajmy, że nie koliduje to z poprzednim importem; teraz do klasy <tt>Element</tt> możemy się odwoływać na dwa sposoby (lecz nadal jest to ta sama klasa).
# W tym miejscu importujemy pakiet <tt>dom</tt> (zagnieżdżony pakiet <tt>xml</tt>-a) jako sam w sobie moduł. Dowolny poziom pakietu może być traktowany jako moduł, co zresztą teraz zobaczyliśmy. Może nawet mieć swoje własne atrybuty i motody, a właśnie jego moduły widzieliśmy wcześniej.
# Tutaj importujemy jako główny poziom pakietu <tt>xml</tt>.
So how can a package (which is just a directory on disk) be imported and treated as a module (which is always a file
|