Lastnost Pythona ()

Konstrukt property () vrne atribut lastnosti.

Sintaksa property()je:

 lastnost (fget = Brez, fset = Brez, fdel = Brez, doc = Brez)

Priporočeno branje: Python @property: Kako ga uporabljati in zakaj?

parametri lastnosti ()

property()Traja štiri izbirne parametre:

  • fget (neobvezno) - funkcija za pridobivanje vrednosti atributa. Privzete vrednosti None.
  • fset (neobvezno) - funkcija za nastavitev vrednosti atributa. Privzete vrednosti None.
  • fdel (neobvezno) - Funkcija za brisanje vrednosti atributa. Privzete vrednosti None.
  • doc (neobvezno) - niz, ki vsebuje dokumentacijo (niz dokumentov) za atribut. Privzete vrednosti None.

Vrnjena vrednost iz lastnosti ()

property() vrne atribut lastnosti danega geterja, nastavitelja in brisalca.

  • Če niso podani nobeni argumenti, property()vrne atribut osnovne lastnosti, ki ne vsebuje nobenega getterja, nastavitelja ali brisalca.
  • Če dokument ni na voljo, property()vzame niz dokumentov funkcije getter.

Primer 1: Ustvari atribut z getter, setter in deleter

 class Person: def __init__(self, name): self._name = name def get_name(self): print('Getting name') return self._name def set_name(self, value): print('Setting name to ' + value) self._name = value def del_name(self): print('Deleting name') del self._name # Set property to use get_name, set_name # and del_name methods name = property(get_name, set_name, del_name, 'Name property') p = Person('Adam') print(p.name) p.name = 'John' del p.name

Izhod

 Pridobivanje imena Ime je: Adam Nastavitev imena na John Brisanje imena 

Tu se _name uporablja kot zasebna spremenljivka za shranjevanje imena osebe.

Določili smo tudi:

  • metoda pridobivanja, get_name()da dobite ime osebe,
  • nastavitvena metoda set_name()za določitev imena osebe,
  • način del_name()brisanja za brisanje imena osebe.

Zdaj nastavimo novo ime atributa lastnosti s klicanjem property()metode.

Kot je prikazano v programu, sklicevanje na p.namenotranje klice get_name()kot getter, set_name()setter in del_name()deleter prek natisnjenega izhoda, ki je prisoten znotraj metod.

2. primer: Uporaba @property decorator

Namesto uporabe property()lahko z dekoraterjem Python @propertydodelite getter, setter in deleter.

 class Person: def __init__(self, name): self._name = name @property def name(self): print('Getting name') return self._name @name.setter def name(self, value): print('Setting name to ' + value) self._name = value @name.deleter def name(self): print('Deleting name') del self._name p = Person('Adam') print('The name is:', p.name) p.name = 'John' del p.name

Izhod

 Pridobivanje imena Ime je: Adam Nastavitev imena na John Brisanje imena 

Tu smo namesto uporabe property()uporabili @propertydekorater.

Najprej določimo, da je name()metoda tudi atribut osebe. To se naredi z uporabo @propertymetode getter, kot je prikazano v programu.

Nato z imenom atributa določimo nastavitelja in izbrisalec.

To se naredi z uporabo @name.settermetode nastavitve in @name.deletermetode brisanja.

Opazimo, da smo uporabili isto metodo name()z različnimi definicijami za določanje getterja, setterja in brisalca.

Zdaj, kadar koli uporabimo p.name, interno pokliče ustrezni getter, setter in deleter, kot prikazuje natisnjeni izhod, ki je prisoten znotraj metode.

Zanimive Članki...