Konstrukce property () vrací atribut vlastnosti.
Syntaxe property()
je:
vlastnost (fget = None, fset = None, fdel = None, doc = None)
Doporučená literatura: Python @property: Jak ji používat a proč?
vlastnost () parametry
property()
Trvá čtyři volitelné parametry:
- fget (volitelné) - Funkce pro získání hodnoty atributu. Výchozí nastavení pro
None
. - fset (volitelné) - Funkce pro nastavení hodnoty atributu. Výchozí nastavení pro
None
. - fdel (volitelně) - funkce pro odstranění hodnoty atributu. Výchozí nastavení pro
None
. - doc (volitelně) - Řetězec, který obsahuje dokumentaci (docstring) k atributu. Výchozí nastavení pro
None
.
Vrátit hodnotu z vlastnosti ()
property()
vrací atribut vlastnosti z daného getru, setteru a deleteru.
- Pokud nejsou zadány žádné argumenty,
property()
vrátí atribut základní vlastnosti, který neobsahuje žádný getter, setter ani deleter. - Pokud není k dispozici doc ,
property()
převezme docstring funkce getter.
Příklad 1: Vytvořte atribut pomocí metody 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ýstup
Získání jména Jméno je: Adam Nastavení jména na John Mazání jména
Zde se _name používá jako soukromá proměnná pro ukládání jména osoby.
Také jsme nastavili:
- metoda getru
get_name()
pro získání jména osoby, - metoda setter
set_name()
pro nastavení jména osoby, - metodu deleter
del_name()
k odstranění jména osoby.
Nyní jsme voláním property()
metody nastavili nový název atributu vlastnosti .
Jak je znázorněno v programu, p.name
interní odkazování volá get_name()
jako getter, set_name()
jako setter a del_name()
jako deleter prostřednictvím tištěného výstupu přítomného uvnitř metod.
Příklad 2: Použití dekorátoru @ vlastnictví
Místo použití property()
můžete použít dekorátor Pythonu @property
k přiřazení getru, setteru a deleteru.
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ýstup
Získání jména Jméno je: Adam Nastavení jména na John Mazání jména
Zde jsme místo použití property()
použili @property
dekoratér.
Nejprve zadáme, že name()
metoda je také atributem Person. To se provádí pomocí @property
metody před getrem, jak je uvedeno v programu.
Dále použijeme název atributu k určení setteru a deleteru.
To se provádí pomocí @name.setter
metody setter a @name.deleter
metody deleter.
Všimněte si, že jsme použili stejnou metodu name()
s různými definicemi pro definování getter, setter a deleter.
Nyní, kdykoli použijeme p.name
, interně volá příslušný getter, setter a deleter, jak ukazuje tištěný výstup přítomný uvnitř metody.