Python īpašums ()

Ī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.nameiekšē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, @propertylai 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 @propertydekoratoru.

Pirmkārt, mēs precizējam, ka name()metode ir arī Personas atribūts. Tas tiek darīts, izmantojot @propertypirms 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.settersetera metodi un @name.deleterdeleter 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ā.

Interesanti raksti...