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.py
imodule2.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