RPI LCD Dev log – porozmawiajmy o obiektowości Pythona

W ostatniej aktualizacji dodałem wersję pre-alpha możliwości tworzenia wielopoziomowego menu. Brakuje kilku tweaków tu i tam ale całość ogólnie działa. Aby zminimalizować ilość kodu potrzebną do tej funkcjonalności zdecydowałem się na oddzielenie funkcjonalności dotyczących samego menu od funkcji związanych konkretnie z wyświetlaczem LCD 16×2. Dzięki temu obiekt RpiLCDSubMenu może dziedziczyć po RpiLCDMenu, które to dziedziczy funkcjonalności bazowego obiektu BasicMenu.

Okazuje się że Python umożliwia inicjalizowanie wybranych „przodków” z pominięciem tych pośrednich. Dzięki temu zamiast tworzyć wciąż i wciąż nowe menu główne (i przypisywać jako menu podrzędne) mogę tworzyć SubMenu na podstawie menu głównego, bez potrzeby ponownej reinicjalizacji modułu wyświetlacza:

Fajna sprawa i bardzo przydatna. Zauważmy, że self.__class__.__bases__ zawraca nam tablicę, gdyż klasa może dziedziczyć po więcej niż jednej klasie nadrzędnej.