Acest mic script conține funcția jurnal. care are o funcție ca un singur argument. Creăm un obiect logger, iar numele fișierului jurnal este același ca și funcția. După aceea, funcția jurnal va scrie în ce mod a fost chemată funcția noastră și ce revine, dacă se întoarce.
Built-in decoratori
Python conține mai mulți decoratori încorporați. Dintre toți acești decoratori, trioul cel mai important sunt:
Există, de asemenea, decoratori în diferite secțiuni ale bibliotecii standard Python. Un exemplu este functools.wraps. Ne vom concentra pe cei trei decoratori principali menționați mai sus.
@classmethod și @staticmethod
Nu le-am folosit înainte, așa că am făcut o mică cercetare.
- decorator <*@classmethod>* poate fi invocat folosind o instanță a clasei sau direct, prin propria sa clasă Python ca primul său argument. Conform documentației Python: poate fi numită fie într-o clasă (de exemplu, C.f ()), fie într-o instanță (de exemplu, C (). Exemplul este ignorat, cu excepția clasei sale. Dacă metoda de clasă este apelată pentru clasa derivată, atunci obiectul clasei derivate este trecut ca primul argument implicit.
- Decoratorul este @classmethod. în primul rând, este folosit ca constructor alternativ sau ca metodă auxiliară pentru inițializare.
- decorator <*@staticmethod>* Este doar o funcție în interiorul clasei. Puteți să-i apelați pe amândoi cu inițierea clasei și fără a crea o instanță a clasei. Acest lucru este de obicei folosit atunci când aveți o funcție pe care credeți că o are o relație cu clasa. În cea mai mare parte, aceasta este alegerea stilului.
Dacă aruncăm o privire la exemplul de cod, care arată cum funcționează decoratorul, acesta poate ajuta la înțelegerea principiilor de bază:
Acest exemplu demonstrează că puteți apela metoda obișnuită și ambele metode de decorator în același mod. Rețineți că puteți să apelați atât @classmethod și @staticmethod direct din clasă, fie din instanța clasei. Dacă încercați să apelați o funcție normală folosind o clasă (cu alte cuvinte, DecoratorTest.doubler (2)), veți primi o eroare TypeError. De asemenea, merită remarcat faptul că ultima declarație de ieșire arată că decor.static_quad returnează o funcție normală în locul unei metode asociate.
Proprietăți Python (@property)
Python conține un concept foarte util, denumit proprietate. care îndeplinește mai multe sarcini utile. Ne vom uita cum să facem următoarele:
- Conversia unei metode într-un atribut numai pentru citire;
- Cum să implementați setteri și getters în atribut
Una dintre cele mai simple căi de a folosi proprietatea. acest lucru este să-l folosească ca o metodă de decorator. Aceasta vă va permite să transformați o metodă de clasă într-un atribut al unei clase. Pentru mine a fost foarte util atunci când trebuia să fac o combinație de valori. Pentru alții, acest lucru a fost foarte util atunci când au fost formulate metode de conversie, care trebuiau acceptate ca metode. Să aruncăm o privire la un exemplu simplu:
Dacă te uiți la legenda de sub proprietate, va fi fget. fset. fdel și doc ca argumente. Puteți crea o altă metodă de decorare folosind același nume de conexiune cu funcția de deletare cu <@fee.deleter*>*. dacă doriți să prindeți comanda ** del pentru atribut.
Să însumăm rezultatele
De acum încolo, trebuie să înțelegeți cum să vă creați decoratorii și cum să utilizați decoratorii Python încorporați. Am examinat metode de clasă. @property și @staticmethod. Sper că veți folosi decoratorii încorporați și creați-vă propriul.
Liste, tupluri și dicționare în Python
Învățând funcțiile lambda în Python