Tworzenie modułów

WPROWADZENIE

W najprostszym przypadku moduły zawierają kod napisany w języku Python. Moduły mogą też odpowiadać rozszerzeniom napisanym w innych językach zewnętrznych, takich jak C, Java czy C#.

Rozszerzenia zewnętrzne do Pythona zazwyczaj wykorzystują narzędzia z pakietu distutils z biblioteki standardowej do automatycznej instalacji. Zwykle tworzy się skrypt setup.py wykonywany w celu instalacji rozszerzeń.

Każdy moduł ma wbudowany atrybut __name__, który Python automatycznie ustawia w następujący sposób:

W rezultacie zmienna __name__ modułu służy jako opcja trybu użycia, pozwalając na wykorzystanie kodu zarówno w postaci biblioteki i jak i skryptu najwyższego poziomu.


Nazwa pliku: 'starwars.py'
Nazwa modułu: 'starwars'
__name__ == '__main__' jeżeli moduł działa jako program najwyższego poziomu,
__name__ == 'starwars' jeżeli moduł był importowany.

STRUKTURA MODUŁU


#!/usr/bin/python

module_docstring   # opcjonalnie

# imports
import sys

# constants

# exception classes

# interface functions

# classes

# internal functions and classes

def tester():   # funkcja testująca moduł
    instructions

if __name__ == "__main__":   # testujemy, jeżeli moduł nie jest importowany
    status = tester()
    sys.exit(status)

UKRYWANIE DANYCH W MODUŁACH

Jeżeli wykonujemy import modułu za pomocą instrukcji from *, to istnieją dwa sposoby, aby zapobiec skopiowaniu wszystkich zmiennych z modułu do modułu głównego i zanieczyszczenia przestrzeni nazw.


__all__ = ["MyError", "encode", "decode"]   # eksportuje tylko te zmienne

Python najpierw szuka w module listy __all__, a jeżeli jej nie znajdzie, to kopiowane są wszystkie zmienne niezawierające znaku pojedyńczego podkreślenia. Należy podkreślić, że te dwa podane sposoby (konwencje) mają znaczenie jedynie dla instrukcji from * i nie mają nic wspólnego z deklarowaniem zmiennej jako prywatnej.