Porządek w kodzie: importy, moduły i magia if __name__ == "__main__
W świecie Pythona przejrzystość to podstawa. Zamiast tworzyć jeden gigantyczny plik, warto dzielić projekt na mniejsze, logiczne części. Dzięki temu kod staje się łatwiejszy w utrzymaniu, testowaniu i ponownym wykorzystaniu.
Moduły i klasy: budowanie z klocków
Każdy plik .py, który tworzymy, jest modułem. Może on zawierać funkcje, zmienne, ale przede wszystkim klasy. Importowanie pozwala nam korzystać z gotowych rozwiązań w różnych częściach projektu.
| import moduł: | Daje dostęp do całej zawartości. |
| from moduł import element: | Pozwala wyciągnąć z modułu dokładnie to, czego potrzebujemy — może to być klasa, funkcja, instancja lub konkretna wartość (zmienna). Takie podejście sprzyja minimalizmowi, ponieważ nie zaśmiecamy pamięci i przestrzeni nazw całymi bibliotekami, gdy potrzebujemy tylko jednego narzędzia. |
O co chodzi z if __name__ == "__main__"?
To jedna z najważniejszych konstrukcji w Pythonie. Kiedy uruchamiamy plik, Python ustawia specjalną zmienną wewnętrzną __name__.
- Jeśli uruchamiamy plik bezpośrednio – __name__ przyjmuje wartość "__main__".
- Jeśli plik jest importowany przez inny skrypt – __name__ przyjmuje nazwę tego pliku.
Dlaczego to jest ważne?
Bez tej instrukcji, każda funkcja wywołana "luzem" w module wykonałaby się automatycznie podczas samego importu. Dzięki if __name__ == "__main__" mamy pewność, że kod testowy lub demonstracyjny uruchomi się tylko wtedy, gdy tego chcemy.
Praktyczny przykład: Monitor Systemowy (Licencja MIT)
Ten skrypt to prosty przykład modularności. Klasa SystemInfo zbiera dane, a sekcja __main__ służy jako demo działania.
# SAKS_Core_Example.py
# Autor: Kajotte Studio | Licencja: MIT
# Opis: Demonstracja modułowości i zbierania podstawowych danych systemowych.
import platform
import os
class SystemInfo:
"""Klasa odpowiedzialna za gromadzenie informacji o środowisku."""
def __init__(self):
self.os_name = platform.system()
self.node_name = platform.node()
self.release = platform.release()
def get_summary(self):
"""Zwraca sformatowany raport systemowy."""
return f"System: {self.os_name} | Host: {self.node_name} | Wersja: {self.release}"
# Sekcja zabezpieczająca przed niechcianym wykonaniem przy imporcie
if __name__ == "__main__":
# Ten kod wykona się TYLKO przy bezpośrednim uruchomieniu pliku
print("--- Kajotte Studio: Demo Modułu SystemInfo ---")
monitor = SystemInfo()
print(monitor.get_summary())
print(f"Bieżący katalog: {os.getcwd()}")
print("---------------------------------------------")
Jak to wykorzystać?
Jeśli stworzysz inny plik i napiszesz w nimfrom SAKS_Core_Example import SystemInfo
będziesz mógł używać klasy,
ale napisy --- Demo --- nie zaśmiecą Ci konsoli.
To czyste, profesjonalne i zachęcające do dalszego rozwoju własnych narzędzi!
👇
▒ Przewodnik po blogu: wszystkie posty o programowaniu w jednym miejscu. ▹ Zobacz