De eigenschap () construct retourneert het eigenschap attribuut.
De syntaxis van property()
is:
eigenschap (fget = None, fset = None, fdel = None, doc = None)
Aanbevolen literatuur: Python @property: hoe te gebruiken en waarom?
property () Parameters
Er zijn property()
vier optionele parameters nodig:
- fget (optioneel) - Functie om de attribuutwaarde op te halen. Standaard ingesteld op
None
. - fset (optioneel) - Functie voor het instellen van de attribuutwaarde. Standaard ingesteld op
None
. - fdel (optioneel) - Functie voor het verwijderen van de attribuutwaarde. Standaard ingesteld op
None
. - doc (optioneel) - Een string die de documentatie (docstring) voor het attribuut bevat. Standaard ingesteld op
None
.
Retourwaarde van eigenschap ()
property()
geeft het eigenschapkenmerk terug van de gegeven getter, setter en deleter.
- Als er geen argumenten zijn opgegeven,
property()
wordt een kenmerk van een basiseigenschap geretourneerd dat geen getter, setter of deleter bevat. - Als doc niet wordt opgegeven,
property()
wordt de docstring van de getter-functie gebruikt.
Voorbeeld 1: attribuut maken met getter, setter en 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
Uitvoer
De naam krijgen De naam is: Adam Naam instellen op Jan Naam verwijderen
Hier wordt _name gebruikt als de privévariabele voor het opslaan van de naam van de persoon.
We stellen ook:
- een getter-methode
get_name()
om de naam van de persoon te krijgen, - een setter-methode
set_name()
om de naam van de persoon in te stellen, - een
del_name()
verwijderingsmethode om de naam van de persoon te verwijderen.
Nu stellen we een nieuwe eigenschapkenmerknaam in door de property()
methode aan te roepen .
Zoals getoond in het programma, verwijst p.name
intern naar oproepen get_name()
als getter, set_name()
als setter en del_name()
als deleter via de afgedrukte uitvoer die aanwezig is in de methoden.
Voorbeeld 2: @property decorateur gebruiken
In plaats van te gebruiken property()
, kunt u de Python-decorateur @property
gebruiken om de getter, setter en deleter toe te wijzen.
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
Uitvoer
De naam krijgen De naam is: Adam Naam instellen op Jan Naam verwijderen
Hier hebben we in plaats van te gebruiken property()
de @property
decorateur gebruikt.
Ten eerste specificeren we dat de name()
methode ook een attribuut is van Persoon. Dit wordt gedaan door @property
de methode getter te gebruiken zoals weergegeven in het programma.
Vervolgens gebruiken we de attribuutnaam om de setter en de deleter te specificeren.
Dit wordt gedaan door te gebruiken @name.setter
voor de setter-methode en @name.deleter
voor de deleter-methode.
Let op, we hebben dezelfde methode name()
met verschillende definities gebruikt voor het definiëren van de getter, setter en deleter.
Nu, wanneer we het gebruiken p.name
, roept het intern de juiste getter, setter en deleter aan, zoals wordt getoond door de afgedrukte uitvoer die aanwezig is in de methode.