Przejdź do głównej zawartości

Python – Sylabus nauki od A do Z

(z naciskiem na OOP i pytest)

Kompletny plan nauki Pythona od podstaw do poziomu zaawansowanego.
Szczególny nacisk położony jest na programowanie obiektowe (OOP) oraz testowanie z użyciem pytest.


1. Podstawy absolutne

  • Czym jest Python (CPython, wersje)
  • Instalacja (Linux / Windows / venv)
  • Uruchamianie:
    • REPL
    • pliki .py
    • shebang
  • Styl kodu:
    • PEP8
    • indentacja
    • komentarze
  • Podstawowe typy danych:
    • int, float
    • str
    • bool
    • None
  • Operatory:
    • arytmetyczne
    • porównania
    • logiczne
  • Zmienne i przypisania
  • Konwersje typów (int(), str())

2. Struktury danych

  • list
    • indeksowanie
    • slicing
    • metody (append, pop, sort)
  • tuple
  • set
  • dict
  • Zagnieżdżone struktury danych
  • Iterowanie po kolekcjach
  • Operatory in, len()

3. Sterowanie przepływem

  • Instrukcje warunkowe:
    • if / elif / else
    • match-case
  • Pętle:
    • for
    • while
  • break, continue
  • pass
  • Wyrażenia warunkowe (ternary operator)

4. Funkcje

  • Definicja funkcji
  • Parametry:
    • pozycyjne
    • nazwane
    • domyślne
    • *args, **kwargs
  • return
  • Docstringi
  • Type hints (podstawy)
  • Funkcje jako obiekty
  • Funkcje zagnieżdżone

5. Praca z plikami i systemem

  • open()
  • Tryby plików
  • Praca z plikami CSV i JSON
  • pathlib
  • os
  • Argumenty linii poleceń:
    • sys.argv
    • argparse

6. Wyjątki i błędy

  • try / except / else / finally
  • Typy wyjątków
  • Własne wyjątki
  • raise
  • Dobre praktyki obsługi błędów

7. Moduły i pakiety

  • import, from, as
  • Struktura pakietu
  • __init__.py
  • __name__ == "__main__"
  • Moduły standardowe
  • Zarządzanie zależnościami:
    • pip
    • requirements.txt

8. Wprowadzenie do OOP (blok kluczowy)

  • Czym jest OOP
  • Klasa vs obiekt
  • Atrybuty i metody
  • Konstruktor __init__
  • self
  • Enkapsulacja

9. OOP – poziom podstawowy

  • Metody instancji
  • Metody klasowe (@classmethod)
  • Metody statyczne (@staticmethod)
  • Atrybuty klasowe vs instancji
  • Widoczność (_, __)
  • __repr__, __str__

10. OOP – dziedziczenie

  • Dziedziczenie klas
  • super()
  • Nadpisywanie metod
  • Polimorfizm
  • Kompozycja vs dziedziczenie
  • MRO (Method Resolution Order)

11. OOP – zaawansowane

  • Klasy abstrakcyjne (abc)
  • Interfejsy w Pythonie
  • @property
  • dataclasses
  • __slots__
  • __eq__, __hash__
  • Obiekty niemutowalne (immutable)

12. Programowanie funkcyjne w Pythonie

  • map, filter, reduce
  • lambda
  • Comprehensions:
    • list
    • dict
    • set
  • Generatory
  • yield

13. Typowanie statyczne

  • Type hints
  • Optional
  • Union
  • TypedDict
  • Protocol
  • mypy
  • Typowanie w projektach OOP

14. Testowanie – podstawy (pytest)

  • Dlaczego testujemy kod
  • Rodzaje testów:
    • unit tests
    • integration tests
  • Instalacja pytest
  • Struktura testów
  • assert
  • Uruchamianie testów
  • Testowanie funkcji

15. pytest – praktyka

  • Fixtures
  • Scope fixtures
  • @pytest.mark.parametrize
  • Markery
  • Testowanie wyjątków
  • Testowanie klas i metod
  • Testowanie kodu OOP

16. pytest – zaawansowane

  • monkeypatch
  • capsys
  • Mocki (unittest.mock)
  • Testy regresji
  • Testy przypadków brzegowych
  • Pokrycie kodu:
    • pytest-cov

17. Dobre praktyki i clean code

  • SOLID w Pythonie
  • DRY / KISS
  • Refaktoryzacja
  • Czytelne nazewnictwo
  • Struktura projektu
  • Dependency Injection
  • Projektowanie kodu testowalnego

18. Praca z bibliotekami

  • requests
  • datetime
  • logging
  • sqlite3 / PostgreSQL
  • Obsługa API
  • Serializacja danych

19. Asynchroniczność (opcjonalnie)

  • async / await
  • asyncio
  • I/O bound vs CPU bound
  • Testowanie kodu async w pytest

20. Projekt końcowy

  • Aplikacja oparta o OOP
  • Jasna separacja warstw
  • Testy jednostkowe (pytest)
  • Mockowanie zależności
  • Typowanie statyczne
  • Dokumentacja projektu

🎯 Cel końcowy

Po ukończeniu sylabusa:

  • rozumiesz Python od podstaw
  • swobodnie stosujesz OOP
  • piszesz testy w pytest
  • potrafisz projektować czysty, testowalny kod