Wpis z mikrobloga

Pytanie do ludzi programujących w #python, czy w swoim kodzie korzystacie z dekoratorów?

Przerabiam kolejny z rzędu artykuł o dekoratorach i ciężko mi pojąć zasadność ich użycia. Może to kwestia złych tutoriali i artykułów, może przerobienie jakiegoś bardziej życiowego przypadku ułatwiłoby mi wykorzystanie takiej funkcjonalności. Ktoś może wytłumaczyć w sposób "jak dla tłumana" na jakimś życiowym przypadku sens zastosowania dekoratorów?
  • 15
  • Odpowiedz
@linuxuser: korzystam. Czasem się przydają, czasem piszę własne. Pierwszy przykład z prawdziwego życia, jaki mi przychodzi do głowy:

kolorki w terminalu - używa się do tego specjalnych ciągów znaków, które magicznie się zmieniają na kolory jeśli urządzeniem wyjściowym rzeczywiście jest terminal

mam już napisane funkcje, które mi opakowują tekst w te ciągi znaków

ale w przypadku gdy wyjście przekazuję do jakiegoś pipe'a albo przekierowuję do pliku, to te ciągi znaków są
  • Odpowiedz
@linuxuser: a w ogólności to nie warto sobie zaprzątać głowy, czy coś co istnieje jest przydatne czy nie (skoro istnieje, to pewnie jest xD). Warto wiedzieć że coś jest, a sytuacja w której ci się przypomni "o, tu mógłbym użyć dekoratorów/context managera/czegokolwiek" przyjdzie sama.
  • Odpowiedz
@linuxuser: Ja napisałem sobie kiedyś kilku linijkowy dekorator który zapisywał do logów czas wykonania funkcji - w ten sposób miałem dane "z produkcji" dla udekorowanych metod a nie z testów czy narzędzi do profilowania.

W aktualnej robocie gdzie z racji na rozmiar projektu pewne rzeczy były pisane w technologiach własnych albo w nietypowym stacku technologicznym dekoratory służą do walidacji uprawnień w wybranych miejscach - sprawdzają zawartość nagłówków, aktualność sesji, uprawnienia itd.
  • Odpowiedz
@linuxuser: najbardziej życiowy przykład? sprawdzanie uprawnień czy zalogowania - dekorator zwróci 401 zamiast wykonywać funkcję. proste i użyteczne
  • Odpowiedz
@Datun: miałem tak kiedyś w projekcie ( ͡° ʖ̯ ͡°) fajnie się wszystko ładowało automatycznie, ale i tak trzeba było nadpisywać ścieżki przy dodawaniu parametrów do URLa :/
  • Odpowiedz
@linuxuser: tak na przykład dekorator odmierzający czas wykonania danej funkcji zwracajacy ładny wynik, dekorator dostępu do czegoś po sprawdzeniu czy jest sie adminem, testy automatyczne w behave gdzie też są dekoratory i w łatwy sposób można tworzyć kroki, sporo zastosowań, głównie upraszczanie składni, i zapobieganie przepisywania tego samego kodu
  • Odpowiedz