2.1 Wprowadzenie do pakietów
Pakiety to sposób na strukturyzację modułów w katalogi. Pakiet to katalog, zawierający plik __init__.py i jeden lub więcej modułów. Plik __init__.py może być pusty lub zawierać kod inicjujący pakiet.
Przykład struktury pakietu/katalogu
mypackage/
__init__.py
module1.py
module2.py
Zawartość pliku __init__.py |
|---|
|
Zawartość pliku module1.py |
|---|
|
Zawartość pliku module2.py |
|---|
|
Przykład kodu używającego funkcji tego pakietu:
import mypackage
print(mypackage.func1()) # Output: Function 1
print(mypackage.func2()) # Output: Function 2
Dajmy teraz spróbę napisać własny pakiet, a przy okazji zrozumiemy, jak działają inne.
2.2 Tworzymy własny pakiet krok po kroku
Krok 1: Tworzenie struktury pakietu
Pierwszym krokiem jest utworzenie struktury katalogów i plików dla waszego pakietu. Na przykład utworzymy pakiet o nazwie mypackage, zawierający dwa moduły: module1.py i module2.py.
Przykład struktury pakietu:
mypackage/
__init__.py
module1.py
module2.py
Opis plików:
-
__init__.py: Ten plik może być pusty lub zawierać kod inicjujący pakiet. Jest potrzebny, aby Python rozpoznawał katalog jako pakiet. -
module1.pyimodule2.py: Te pliki zawierają funkcje, klasy i zmienne, które chcecie uwzględnić w swoim pakiecie.
Krok 2: Pisanie kodu dla modułów
Napiszmy prosty kod dla naszych modułów.
module1.py
def func1():
return "Function 1 from module1"
module2.py
def func2():
return "Function 2 from module2"
__init__.py
Aby zaimportować funkcje z naszych modułów na poziom pakietu, dodamy je do __init__.py.
from .module1 import func1
from .module2 import func2
Teraz, gdy zaimportujecie pakiet, funkcje func1 i func2 będą dostępne bezpośrednio.
Krok 3: Testowanie pakietu
Utwórzcie plik test.py w tym samym katalogu, gdzie znajduje się katalog mypackage, i użyjcie pakietu w tym pliku do testowania.
test.py
import mypackage
print(mypackage.func1()) # Output: Function 1 from module1
print(mypackage.func2()) # Output: Function 2 from module2
Uruchomcie test.py, aby upewnić się, że wasz pakiet działa poprawnie.
2.3 Użycie funkcji dir()
Kiedy zaimportujecie moduł lub pakiet, możecie użyć funkcji dir(), aby uzyskać listę wszystkich dostępnych atrybutów i metod w tym module. Jest to szczególnie przydatne, jeśli pracujecie z nowym lub nieznanym modułem i chcecie szybko zobaczyć, jakie funkcje i klasy są dostępne.
Przykład: Badanie standardowego modułu math
Przyjrzyjmy się przykładowemu użyciu dir() do badania standardowego modułu math.
import math
print(dir(math))
Ten kod importuje moduł math i wyświetla listę wszystkich dostępnych atrybutów i metod. Wynik będzie wyglądał mniej więcej tak:
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan',
'atan2', 'atanh', 'ceil', 'comb', 'copysign', 'cos', 'cosh', 'degrees', 'dist', 'e', 'erf', 'erfc', 'exp', 'expm1',
'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf',
'isnan', 'isqrt', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'perm', 'pi', 'pow', 'prod',
'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc']
Ta lista zawiera wszystkie funkcje i stałe zdefiniowane w module math, takie jak sin, cos, tan, pi i inne.
Użycie dir() do własnych modułów
Możecie również użyć dir() do własnych modułów. Załóżmy, że macie plik mymodule.py z poniższą zawartością:
# mymodule.py
def greet(name):
return f"Hello, {name}!"
pi = 3.14159
Możecie zaimportować ten moduł i użyć dir() do badania jego zawartości:
import mymodule
print(dir(mymodule))
Wynik będzie następujący:
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__',
'greet', 'pi']
Lista zawiera 8 specjalnych atrybutów (zaczynających się od podkreślenia) modułu mymodule, a na końcu jest wasza metoda greet oraz zmienna pi.
GO TO FULL VERSION