Zanurkuj w Pythonie/Pakiety: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
Piotr (dyskusja | edycje)
tłumaczenie
Piotr (dyskusja | edycje)
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. TheModuły moduleswewnątrz within a packagepakietu (or alub nestedzagnieżdżonego packagepakietu) are stillnadal justzwykłymi plikami <tt>.py</tt> files,z likewyjątkiem alwaysgo, exceptże that they'rew inpodkatalogu, azamiast subdirectoryw insteadgłównym of the mainkatalogu <tt>lib/</tt> directory of yourtwojej Pythoninstalacji installationPythona.
 
'''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'>
 
# HereW you'retym importingmiejscu aimportujemy modulemoduł (<tt>minidom</tt>) fromz azagnieżdżonego nested packagepakietu (<tt>xml.dom</tt>). TheW resultwyniku is thattego <tt>minidom</tt> iszostał importedzaimportowany intodo yourtwojej namespace,przestrzeni andnazw. inAby ordersię toodwołać referencedo classesklasy withinwewnątrz thetego minidom modulemodułu (likenp. <tt>Element</tt>), you need tobędziesz prefacemusiał themnazwę withklasy thepoprzedzić modulenazwą namemodułu.
# 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).
# Here you are importing a class (Element) from a module (minidom) from a nested package (xml.dom). The result is that Element is imported directly into your namespace. Note that this does not interfere with the previous import; the Element class can now be referenced in two ways (but it's all still the same class).
# 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.
# Here you are importing the dom package (a nested package of xml) as a module in and of itself. Any level of a package can be treated as a module, as you'll see in a moment. It can even have its own attributes and methods, just the modules you've seen before.
# Tutaj importujemy jako główny poziom pakietu <tt>xml</tt>.
# Here you are importing the root level xml package as a module.
 
So how can a package (which is just a directory on disk) be imported and treated as a module (which is always a file