Hvorfor er dekoratører nyttig?

stemmer
2

Så jeg leste denne siden om dekoratører, men jeg fortsatt ikke forstår når dekoratører er nyttige.

Vurdere et stykke kode som definerer en funksjon f, og deretter kaller det flere ganger. For noen grunn vi ønsker få gjøre noe ekstra arbeid. Så vi har 2 måter å gjøre det:

  1. definerer en ny funksjon gsom kaller f, og gjør det ekstra arbeidet som trengs. Deretter i hovedkoden, erstatte alle samtaler til fetter samtaler tilg
  2. definere en dekoratør g, og redigere koden for å legge til @gfør samtaler tilf

Til slutt, de begge oppnå samme resultat og fordelen av to) over en) er ikke opplagt for meg. Hva er jeg mangler?

Publisert på 06/03/2014 klokken 11:07
kilden bruker
På andre språk...                            


1 svar

stemmer
1

Anta at du har en rekke funksjoner f1, f2, f3, ... og du ønsker en vanlig måte å gjøre den samme endringen til dem alle å gjøre det samme ekstra arbeid.

Det er hva du mangler og det er derfor dekoratører er nyttige. Det vil si, funksjoner som tar en funksjon og returnere en modifisert versjon av den.

Dekoratør @syntaks er "bare" for enkelhets skyld. Den lar deg dekorere funksjonen slik den er definert:

@decorated
def foo():
    # several lines

i stedet for et sted etter funksjonsdefinisjonen:

def foo():
    # several lines

foo = decorated(foo)

Faktisk selvfølgelig sistnevnte kode er ganske forferdelig, siden det betyr at ved å se på den første definisjonen av fooi kilden, ser du ikke det samme foosom brukerne vil ringe. Så uten syntaks, ville dekoratører ikke være så verdifull fordi du vil stort sett alltid ender opp med å bruke forskjellige navn på de dekorerte og undecorated funksjoner.

Svarte 06/03/2014 kl. 11:14
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more