Īpašuma () konstrukcija atgriež īpašuma atribūtu.
Sintakse property()
ir:
rekvizīts (fget = nav, fset = nav, fdel = nav, doc = nav)
Ieteicamā literatūra: Python @property: Kā to izmantot un kāpēc?
rekvizīts () parametri
Tam property()
nepieciešami četri izvēles parametri:
- fget (pēc izvēles) - funkcija atribūta vērtības iegūšanai. Pēc noklusējuma
None
. - fset (pēc izvēles) - funkcija atribūta vērtības iestatīšanai. Pēc noklusējuma
None
. - fdel (pēc izvēles) - funkcija atribūta vērtības dzēšanai. Pēc noklusējuma
None
. - doc (pēc izvēles) - virkne, kas satur atribūta dokumentāciju (docstring). Pēc noklusējuma
None
.
Atgriešanās vērtība no īpašuma ()
property()
atgriež rekvizīta atribūtu no norādītā getter, setter un deleter.
- Ja netiek doti argumenti,
property()
atgriež bāzes rekvizīta atribūtu, kurā nav ne getter, ne setera, ne deleter. - Ja dokuments nav norādīts,
property()
tiek izmantota getter funkcijas docstring.
1. piemērs: izveidojiet atribūtu ar getter, setter un 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
Rezultāts
Nosaukuma iegūšana Vārds ir: Ādams Nosaka vārdu uz Džons Dzēšot vārdu
Šeit _name tiek izmantots kā privāts mainīgais personas vārda glabāšanai.
Mēs arī iestatījām:
- labāka metode
get_name()
personas vārda iegūšanai, - setera metode
set_name()
personas vārda iestatīšanai, - deleter metode
del_name()
personas vārda dzēšanai.
Tagad, nosaucot property()
metodi , mēs iestatījām jaunu rekvizīta atribūta nosaukumu .
Kā parādīts programmā, p.name
iekšējā atsauce uz metodēm esošajā drukātajā izvadā tiek izsaukta get_name()
kā getter, kā seter set_name()
un del_name()
kā deleter.
2. piemērs: @property dekoratora izmantošana
Tā vietā, lai izmantotu property()
, varat izmantot Python dekoratoru, @property
lai piešķirtu getter, seteri un 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
Rezultāts
Nosaukuma iegūšana Vārds ir: Ādams Nosaka vārdu uz Džons Dzēšot vārdu
Šeit tā vietā, lai izmantotu property()
, mēs izmantojām @property
dekoratoru.
Pirmkārt, mēs precizējam, ka name()
metode ir arī Personas atribūts. Tas tiek darīts, izmantojot @property
pirms getter metodi, kā parādīts programmā.
Pēc tam mēs izmantojam atribūta nosaukumu, lai norādītu iestatītāju un dzēšamo elementu.
To veic, izmantojot @name.setter
setera metodi un @name.deleter
deleter metodi.
Ievērojiet, name()
ka getter, setter un deleter definēšanai mēs izmantojām to pašu metodi ar dažādām definīcijām.
Tagad, kad mēs to izmantojam p.name
, tas iekšēji izsauc atbilstošo getter, setter un deleter, kā parādīts metodē esošajā drukātajā izvadā.