Konštrukt property () vráti atribút vlastnosti.
Syntax property()
je:
property (fget = None, fset = None, fdel = None, doc = None)
Odporúčané čítanie: Python @property: Ako ho používať a prečo?
property () Parametre
property()
Trvá štyri voliteľné parametre:
- fget (voliteľné) - Funkcia na získanie hodnoty atribútu. Predvolené hodnoty pre
None
. - fset (voliteľné) - Funkcia pre nastavenie hodnoty atribútu. Predvolené hodnoty pre
None
. - fdel (voliteľné) - funkcia na odstránenie hodnoty atribútu. Predvolené hodnoty pre
None
. - doc (voliteľné) - Reťazec, ktorý obsahuje dokumentáciu (docstring) k atribútu. Predvolené hodnoty pre
None
.
Vrátená hodnota z vlastnosti ()
property()
vráti atribút vlastnosti z daného getra, setra a deletera.
- Ak nie sú uvedené žiadne argumenty,
property()
vráti atribút základnej vlastnosti, ktorý neobsahuje žiadny geter, setter ani deleter. - Ak dokument nie je poskytnutý,
property()
použije dokumentačný reťazec funkcie getter.
Príklad 1: Vytvorte atribút pomocou príkazu getter, setter a 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
Výkon
Získanie mena Meno je: Adam Nastavenie mena na John Vymazanie mena
Tu sa _name používa ako súkromná premenná na ukladanie mena osoby.
Nastavili sme tiež:
- getrova metóda
get_name()
na získanie mena osoby, - metóda nastavovania
set_name()
na nastavenie mena osoby, - metóda deleter
del_name()
na odstránenie mena osoby.
Teraz sme vyvolaním property()
metódy nastavili nový názov atribútu vlastnosti .
Ako je uvedené v programe, p.name
interné referencovanie volá get_name()
ako getter, set_name()
setter a del_name()
ako deleter prostredníctvom tlačeného výstupu prítomného vo vnútri metód.
Príklad 2: Použitie dekorátora @property
Namiesto použitia property()
môžete @property
na priradenie getra, setra a deletera použiť dekorátor Pythonu .
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
Výkon
Získanie mena Meno je: Adam Nastavenie mena na John Vymazanie mena
Tu sme namiesto použitia property()
použili @property
dekoratér.
Najprv určíme, že name()
metóda je tiež atribútom Person. To sa deje pomocou @property
metódy getra uvedenej v programe.
Ďalej pomocou názvu atribútu zadáme setter a deleter.
To sa deje pomocou @name.setter
metódy setter a @name.deleter
metódy deleter.
Všimnite si, že name()
na definovanie getra, setra a deletera sme použili rovnakú metódu s rôznymi definíciami.
Teraz, kedykoľvek použijeme p.name
, interne zavolá vhodný getter, setter a deleter, ako to ukazuje vytlačený výstup prítomný vo vnútri metódy.