Jak Django używa metaklas
Autor: Idego Group

To techniczne opracowanie bada metaklasy Pythona przez pryzmat implementacji Django. Autor identyfikuje 10 metaklas w kodzie Django 1.8 i analizuje ich praktyczne zastosowania.
Django używa metaklas przede wszystkim do dwóch celów: tworzenia języków domenowych (DSL) dla kodu deklaratywnego oraz implementowania ostrzeżeń o przestarzałości w celu ochrony użytkowników frameworka przed zmianami API.
Framework używa metaklas do zmiany nazw przestarzałych metod z ostrzeżeniami, implementowania niestandardowego zachowania sprawdzania typów, kojarzenia zasobów z formularzami i widgetami oraz zbierania deklaracji pól z atrybutów klas.
Metaklasa ModelBase obsługuje złożone funkcjonalności, w tym abstrakcyjne modele, wzorce dziedziczenia i zarządzanie metadanymi. DeclarativeFieldsMetaclass zbiera deklaracje pól z definicji klas, podczas gdy MediaDefiningClass przetwarza powiązania zasobów.
Zrozumienie ich poprzez samo czytanie kodu nie jest szczególnie trudne, a deweloperzy są zachęcani do tego, aby nie odrzucać metaklas jako nadmiernie skomplikowanych.
Chociaż metaklasy często onieśmielają deweloperów, ich rzeczywiste implementacje w frameworkach produkcyjnych jak Django ujawniają praktyczne, zrozumiałe wzorce skoncentrowane na redukcji szablonowego kodu i utrzymaniu wstecznej kompatybilności.