Poglądowe przykłady, jak zorganizowany jest kod w Pythonie

Poglądowe przykłady, jak zorganizowany jest kod w Pythonie
Porozmawiajmy trochę o organizacji kodu w Pythonie.
Postaramy się trochę bardziej zagłębiać w te koncepcje i przedstawimy bardziej techniczne nazwy i koncepcje.
Zaczynając od podstaw, jak zorganizowany jest kod w Pythonie?

Oczywiście piszesz swój kod w plikach.
Kiedy zapisujesz plik z rozszerzeniem .py, mówi się, że jest to moduł Pythona.
Jeśli korzystasz z systemu Windows lub macOS, które zazwyczaj ukrywają rozszerzenia plików przed użytkownikiem, pamiętaj o zmianie konfiguracji, aby można było zobaczyć pełne nazwy plików.
Nie jest to ścisły wymóg, ale sugestia.

Zapisywanie całego kodu wymaganego do działania oprogramowania w jednym pliku byłoby niepraktyczne.
To rozwiązanie działa w przypadku skryptów, które zwykle nie są dłuższe niż kilkaset wierszy (a często są dość krótsze).
Kompletna aplikacja Pythona może składać się z setek tysięcy linii kodu, więc będziesz musiał rozproszyć ją w różnych modułach, co jest lepsze, ale nie wystarczająco dobre.

Okazuje się, że nawet w ten sposób praca z kodem byłaby niepraktyczna.
Python udostępnia więc inną strukturę, zwaną pakietem, która umożliwia grupowanie modułów.
Pakiet to nic innego jak folder, który musi zawierać specjalny plik __init__.py, który nie musi zawierać żadnego kodu, ale którego obecność jest wymagana, aby powiedzieć Pythonowi, że folder nie jest tylko jakimś folderem, ale w rzeczywistości jest pakietem (zwróć uwagę, że od Pythona 3.3 moduł __init__.py nie jest już ściśle wymagany).
Jak zawsze, przykład pokaże to znacznie jaśniej. Zaprezentowana jest przykładowa struktura, kiedy kod pisany jest w konsoli:
Przykład $ tree -v
Otrzymujemy reprezentację drzewa zawartości folderu ch1/example, w którym znajdują się przykłady kodów.
Oto jak mogłaby wyglądać struktura naprawdę prostej aplikacji:

przykład
├── core.py
├── run.py
└── util
├── __init__.py
├── db.py
├── math.py
└── network.py
Możesz zobaczyć, że w katalogu głównym tego przykładu mamy dwa moduły, core.py i run.py oraz jeden pakiet: util.
W core.py może znajdować się podstawowa logika naszej aplikacji. Z drugiej strony w module run.py prawdopodobnie możemy znaleźć logikę do uruchomienia aplikacji.

Należy spodziewać się, że w pakiecie util znajdziemy różne narzędzia i faktycznie możemy się domyślać, że nazwy modułów w nich są oparte na typach posiadanych przez nie narzędzi: db.py będzie zawierał narzędzia do pracy z bazami danych, a math.py – oczywiście zawiera narzędzia matematyczne (być może nasza aplikacja zajmuje się danymi finansowymi), a network.py prawdopodobnie zawierałby narzędzia do wysyłania/odbierania danych w sieciach.
Jak wyjaśniono wcześniej, plik __init__.py ma tylko powiedzieć Pythonowi, że util jest pakietem, a nie zwykłym folderem.
Gdyby to oprogramowanie zostało zorganizowane tylko w ramach modułów, trudniej byłoby wywnioskować jego strukturę.
Został umieszczony przykład modułu tylko w folderze ch1/files_only; przekonaj się sam:

$ tree -v files_only
To pokazuje nam zupełnie inny obraz:

files_only/
├── core.py
├── db.py
├── math.py
├── network.py
└── run.py

Trochę trudniej jest zgadnąć, co robi każdy moduł, prawda?
Rozważmy teraz, że to tylko prosty przykład, więc możesz zgadnąć, o ile trudniej byłoby zrozumieć prawdziwą aplikację, gdybyśmy nie mogli zorganizować kodu w pakiety i moduły.
Autor: Andy Hart

Komentarze z Facebooka

Komentarze obecnie - OFF.