Construcția property () returnează atributul property.
Sintaxa lui property()
este:
property (fget = None, fset = None, fdel = None, doc = None)
Lectură recomandată: Python @property: Cum se folosește și de ce?
property () Parametri
property()
Ia patru parametri opționali:
- fget (opțional) - Funcție pentru obținerea valorii atributului. Implicit la
None
. - fset (opțional) - Funcție pentru setarea valorii atributului. Implicit la
None
. - fdel (opțional) - Funcție pentru ștergerea valorii atributului. Implicit la
None
. - doc (opțional) - Un șir care conține documentația (docstring) pentru atribut. Implicit la
None
.
Returnează valoarea din proprietate ()
property()
returnează atributul de proprietate de la getter, setter și deleter dat.
- Dacă nu sunt date argumente,
property()
returnează un atribut de proprietate de bază care nu conține niciun getter, setter sau deleter. - Dacă doc nu este furnizat,
property()
preia docstring-ul funcției getter.
Exemplul 1: Creați atributul cu getter, setter și 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
Ieșire
Obținerea numelui Numele este: Adam Setarea numelui pe John Ștergerea numelui
Aici, _name este folosit ca variabilă privată pentru stocarea numelui Persoanei.
De asemenea, am setat:
- o metodă getter
get_name()
pentru a obține numele persoanei, - o metodă setter
set_name()
pentru a seta numele persoanei, - o metodă
del_name()
de ștergere pentru a șterge numele persoanei.
Acum, setăm un nou nume de atribut de proprietate apelând property()
metoda.
Așa cum se arată în program, referindu-se la p.name
apeluri interne get_name()
ca getter, set_name()
ca setter și del_name()
ca ștergere prin ieșirea tipărită prezentă în interiorul metodelor.
Exemplul 2: Utilizarea @property decorator
În loc să îl utilizați property()
, puteți utiliza decoratorul Python @property
pentru a atribui getter, setter și 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
Ieșire
Obținerea numelui Numele este: Adam Setarea numelui pe John Ștergerea numelui
Aici, în loc să îl folosim property()
, am folosit @property
decoratorul.
Mai întâi, specificăm că name()
metoda este și un atribut al Persoanei. Acest lucru se face folosind @property
înainte de metoda getter așa cum se arată în program.
Apoi, folosim numele atributului pentru a specifica setatorul și ștergerea.
Acest lucru se face folosind @name.setter
pentru metoda setter și @name.deleter
pentru metoda deleter.
Observați, am folosit aceeași metodă name()
cu definiții diferite pentru definirea getterului, setterului și deleterului.
Acum, ori de câte ori îl folosim p.name
, apelează intern getter-ul, setter-ul și ștergerea corespunzătoare, așa cum se arată în ieșirea tipărită prezentă în interiorul metodei.