Gdy w CJC użyłem osobnej klasy (nazwijmy ją A) do
rozszerzenia funkcjonalności innej klasy (B), ale tak, że to
B dziedziczyło po A, to myślałem że stosuję jakiś dziwny,
brudny
trik dla własnej wygody. Później czytając dokumentację do
pylinta spotkałem się z określeniem mix-in class
, nie
wiedziałem co to jest, ale tak jakoś mi się skojarzyło z tym co zrobiłem w
CJC.
Teraz coś podobnego chcę zrobić w PyXMPP, aby podzielić
jeden wielki moduł pyxmpp.stream
na mniejsze kawałki.
Przypomniałem sobie o mix-in class
i wrzuciłem to w Google. Okazało się,
że miałem rację. Dowiedziałem, że to znana technika programowania
obiektowego, która wcale nie jest zła. Znalazłem nawet artykuł o tym jak używać mix-ins w
Pythonie. Rzeczywiście Python bardzo ułatwia stosowanie tej techniki.
No to teraz, gdy się podszkoliłem, mogę z czystym sumieniem wziąć się za
wydzielanie StreamSASLMixIn
i StreamTLSMixIn
.
:-)
Ostrożnie z tym. Klasy domieszkowe tylko tak niewinnie wyglądają…
Ale czasem jest to wygodniejsze, od interfejsów.
PolubieniePolubienie
Ja stosuje to w najprostszej postaci (statyczne dziedziczenie), aby nie mieć jednego modułu z 2000 linii i jedną wielką klasą (w PyXMPP), albo odzielić część klasy z dodatkowymi zależnościami od zewnętrznych modułów (CJC).
I dzięki za polską nazwę (nawet mi się podoba) 🙂
PolubieniePolubienie
Dzięki za info, bo nie miałem pojęcia o tej technice, a całkiem mi się ona podoba (szczególnie uwzględniając dynamiczną naturę Pythona). Przy okazji – miałem iść spać przed 12 a poszedłem przed 2 i dorzuciłem sobie ~30 linków do bookmarków. Tak to jest jak się człowiek zawędruje w internecie odwiedzając ciekawe strony. 😛 (głównie z Daily Python-URL, ale nie tylko)
PolubieniePolubienie