Getters: Dit zijn methoden in objectgeoriënteerd programmeren (OOP) die helpen om private attributen van een klasse te benaderen.
Setters: Dit zijn methoden in OOP die helpen om de waarde van private attributen in een klasse te zetten.
Privé-attribuut - Encapsulatie
Als je niet bekend bent met private attributen of private methoden in Python, lees dan dit DataCamp-artikel.
Laten we kijken hoe je een privé-attribuut in Python implementeert.
classSampleClass:def__init__(self, a):## private varibale or property in Python
self.__a = a
## getter method to get the properties using an objectdefget_a(self):return self.__a
## setter method to change the value 'a' using an objectdefset_a(self, a):
self.__a = a
Mogelijk gemaakt door
SampleClass heeft drie methoden.
__init__:- Deze wordt gebruikt om de attributen of eigenschappen van een klasse te initialiseren.
__a:- Dit is een privé-attribuut.
get_a:- Wordt gebruikt om de waarden van het privé-attribuut a op te halen.
set_a:- Wordt gebruikt om de waarde van a te zetten met behulp van een object van een klasse.
Je kunt de private variabelen niet rechtstreeks benaderen in Python. Daarom heb je de getter-methode geïmplementeerd.
Laten we kijken hoe de klasse werkt.
## creating an object
obj = SampleClass(10)## getting the value of 'a' using get_a() methodprint(obj.get_a())## setting a new value to the 'a' using set_a() method
obj.set_a(45)print(obj.get_a())Mogelijk gemaakt door
Zo implementeer je private attributen, getters en setters in Python. In Java werd hetzelfde proces gevolgd. Laten we dezelfde implementatie nu op een Pythonice manier schrijven.
Wat is het verschil tussen de bovenstaande twee klassen?
SampleClass verbergt de private attributen en methoden. Het implementeert de encapsulatie-eigenschap van OOP.
PythonicWay verbergt de data niet. Het implementeert geen enkele vorm van encapsulatie.
Wat kun je het beste gebruiken?
Dat hangt van je behoefte af. Als je private attributen en methoden wilt, kun je de klasse implementeren met setter- en getter-methoden; anders implementeer je het op de normale manier.
Property
Stel dat je voorwaarden wilt stellen aan het zetten van de waarde van een attribuut in de SampleClass.
Bijvoorbeeld: als de doorgegeven waarde even en positief is, zetten we die op het attribuut; anders zetten we de waarde op 2.
Laten we dit implementeren door de methode set_a() in de SampleClass aan te passen.
classSampleClass1:def__init__(self, a):## calling the set_a() method to set the value 'a' by checking certain conditions
self.set_a(a)## getter method to get the properties using an objectdefget_a(self):return self.__a
## setter method to change the value 'a' using an objectdefset_a(self, a):## condition to check whether 'a' is suitable or notif a >0and a %2==0:
self.__a = a
else:
self.__a =2Mogelijk gemaakt door
Laten we de klasse testen door een object aan te maken.
## creating an object for the class 'SampleClass1'
obj = SampleClass1(16)print(obj.get_a())Mogelijk gemaakt door
Laten we bekijken hoe je bovenstaande klasse implementeert met de @property-decorator.
classProperty:def__init__(self, var):## initializing the attribute
self.a = var
@propertydefa(self):return self.__a
## the attribute name and the method name must be same which is used to set the value for the attribute@a.setterdefa(self, var):if var >0and var %2==0:
self.__a = var
else:
self.__a =2Mogelijk gemaakt door
@property wordt gebruikt om de waarde van een privé-attribuut op te halen zonder een getter-methode te gebruiken. We moeten @property plaatsen boven de methode waarin we de private variabele retourneren.
Om de waarde van de private variabele te zetten, gebruiken we @method_name.setter boven de methode. We gebruiken die als setter.
Laten we de klasse Property testen om te zien of de decorators correct werken.
## creating an object for the class 'Property'
obj = Property(23)print(obj.a)Mogelijk gemaakt door
@a.setter zet de waarde van a door de voorwaarden te controleren die we in de methode hebben vermeld. Een andere manier om property te gebruiken is...
classAnotherWay:def__init__(self, var):## calling the set_a() method to set the value 'a' by checking certain conditions
self.set_a(var)## getter method to get the properties using an objectdefget_a(self):return self.__a
## setter method to change the value 'a' using an objectdefset_a(self, var):## condition to check whether var is suitable or notif var >0and var %2==0:
self.__a = var
else:
self.__a =2
a =property(get_a, set_a)Mogelijk gemaakt door
Geef alle getter- en setter-methoden door aan property en wijs die toe aan de variabele die je als klasse-attribuut wilt gebruiken.
## creating an object for the 'AnotherWay' class
obj = AnotherWay(28)print(obj.a)Mogelijk gemaakt door
Maak de setter- en getter-methoden privé om ze te verbergen. Laten we dat doen.
classFinalClass:def__init__(self, var):## calling the set_a() method to set the value 'a' by checking certain conditions
self.__set_a(var)## getter method to get the properties using an objectdef__get_a(self):return self.__a
## setter method to change the value 'a' using an objectdef__set_a(self, var):## condition to check whether var is suitable or notif var >0and var %2==0:
self.__a = var
else:
self.__a =2
a =property(__get_a, __set_a)Mogelijk gemaakt door
Laten we controleren of het correct werkt.
## creating an object for the 'AnotherWay' class
obj = FinalClass(12)print(obj.a)Mogelijk gemaakt door
Wat zijn getters en setters?
Privé-attribuut - Encapsulatie
Als je niet bekend bent met private attributen of private methoden in Python, lees dan dit DataCamp-artikel.
Laten we kijken hoe je een privé-attribuut in Python implementeert.
SampleClass heeft drie methoden.
__init__:- Deze wordt gebruikt om de attributen of eigenschappen van een klasse te initialiseren.
Je kunt de private variabelen niet rechtstreeks benaderen in Python. Daarom heb je de getter-methode geïmplementeerd.
Laten we kijken hoe de klasse werkt.
Zo implementeer je private attributen, getters en setters in Python. In Java werd hetzelfde proces gevolgd. Laten we dezelfde implementatie nu op een Pythonice manier schrijven.
Je hebt geen getters- of setters-methoden nodig om attributen te benaderen of te wijzigen. Je kunt ze direct benaderen via de namen van de attributen.
Laten we kijken.
Wat is het verschil tussen de bovenstaande twee klassen?
Wat kun je het beste gebruiken?
Property
Stel dat je voorwaarden wilt stellen aan het zetten van de waarde van een attribuut in de SampleClass.
Bijvoorbeeld: als de doorgegeven waarde even en positief is, zetten we die op het attribuut; anders zetten we de waarde op 2.
Laten we dit implementeren door de methode set_a() in de SampleClass aan te passen.
Laten we de klasse testen door een object aan te maken.
Laten we bekijken hoe je bovenstaande klasse implementeert met de @property-decorator.
@property wordt gebruikt om de waarde van een privé-attribuut op te halen zonder een getter-methode te gebruiken. We moeten @property plaatsen boven de methode waarin we de private variabele retourneren.
Om de waarde van de private variabele te zetten, gebruiken we @method_name.setter boven de methode. We gebruiken die als setter.
Laten we de klasse Property testen om te zien of de decorators correct werken.
@a.setter zet de waarde van a door de voorwaarden te controleren die we in de methode hebben vermeld. Een andere manier om property te gebruiken is...
Geef alle getter- en setter-methoden door aan property en wijs die toe aan de variabele die je als klasse-attribuut wilt gebruiken.
Maak de setter- en getter-methoden privé om ze te verbergen. Laten we dat doen.
Laten we controleren of het correct werkt.
Conclusie
Je hebt nu gezien hoe je encapsulatie in Python kunt implementeren en wat het verschil is tussen setter, getter en property.
Als je nieuw bent met Python, raad ik je aan om DataCamp's gratis cursus Introduction to Python te volgen.
Heb je vragen over het artikel? Laat ze achter in de reacties. Happy coding!