Python-inkapseling

  • Michael Arnold
  • 0
  • 3603
  • 406
>

Invoering

Inkapseling is een van de fundamentele aspecten van Object Oriented Programming. Het geeft programmeurs een betere controle over hoe gegevens in hun programma's stromen, en het beschermt die gegevens. Inkapseling maakt objecten ook tot meer zelfvoorzienende en onafhankelijk functionerende stukken.
Het concept van inkapseling bouwt voort op wat u in de laatste twee handleidingen met klassen en constructeurs hebt gedaan. Constructors worden meestal gebruikt in nauwe samenhang met inkapseling en helpen feitelijk om inkapseling naadloos te laten werken.

Toegang tot modificatoren

Voordat u kunt profiteren van inkapseling, moet u begrijpen hoe Python de toegang tot de gegevens die zijn opgeslagen in variabelen en methoden beperkt.
Python heeft verschillende beperkingsniveaus die bepalen hoe gegevens toegankelijk zijn en waar vandaan. Variabelen en methoden kunnen openbaar, privé of beschermd zijn. Die aanduidingen worden gemaakt door het aantal onderstrepingstekens vóór de variabele of methode.

Openbaar

Elke variabele en methode die je tot nu toe hebt gezien, met uitzondering van de constructors, is openbaar geweest. Openbare variabelen en methoden kunnen vrij worden gewijzigd en overal vandaan worden uitgevoerd, zowel binnen als buiten de klas. Gebruik geen onderstrepingstekens om een ​​openbare variabele of methode te maken.

Privaat

De private aanduiding staat alleen toegang tot een variabele of methode toe vanuit zijn eigen klasse of object. U kunt de waarde van een privévariabele niet wijzigen van buiten een klasse. Private variabelen en methoden worden voorafgegaan door twee onderstrepingstekens. Bekijk het onderstaande voorbeeld eens.
__make = 'Ontwijken'
Probeer die klasse van tevoren te gebruiken. Stel de variabelen in de constructor in op privé. Probeer vervolgens een van de variabelen af ​​te drukken nadat een object is geïnstantieerd.
 class Car (object): def __init __ (self, make = 'Ford', model = 'Pinto', year = '1971', mileage = '253812', color = 'orange'): self .__ make = make self .__ model = model zelf .__ jaar = jaar zelf .__ kilometerstand = kilometerstand zelf .__ kleur = kleur def move_forward (zelf, snelheid): print ("Je% s gaat vooruit met% s"% (zelf .__ model, snelheid)) def move_backward ( self, speed): print ("Achteruit rijden met% s"% snelheid) mycar = Car () print (mycar .__ model) 
U krijgt een foutmelding dat de variabele niet bestaat. Dit komt doordat die variabele privé is. Probeer nu het move_forward methode.
mycar.move_forward
Alles werkt prima. Dat komt omdat de variabele wordt benaderd door een methode binnen de klasse, niet extern.
Er zit hier een addertje onder het gras. Python behandelt niet precies beschermde variabelen en andere objectgeoriënteerde talen. In plaats van variabelen daadwerkelijk te beschermen, verandert het de naam ervan binnen de tolk. Hierdoor kunnen verschillende kopieën van de variabele worden gemaakt en bestaan. Probeer een van de beschermde variabelen in uw mijn auto object en het afdrukken.
 mycar .__ model = 'Mustang'-afdruk (mycar .__ model) 
Nu lijkt het te werken, maar wat u hebt afgedrukt, is een vreemde kopie van de beschermde variabele. Probeer de move_forward methode opnieuw.
mycar.move_forward
Het printte de oorspronkelijke waarde van __model. De variabelen bestaan ​​onafhankelijk. U kunt dit verder illustreren door het object als woordenboek af te drukken. U ziet twee verschillende variabelen.
print (mycar .__ dict__)

Beschermd

Beveiligde variabelen en methoden lijken sterk op privé-variabelen. U zult waarschijnlijk niet vaak beschermde variabelen of methoden gebruiken, maar het is toch de moeite waard om te weten wat ze zijn. Een variabele die beschermd is, is alleen toegankelijk voor zijn eigen klasse en eventuele daarvan afgeleide klassen. Dat is meer een onderwerp voor later, maar houd er rekening mee dat als u een klasse als basis van een andere gebruikt, beschermde variabelen een goede optie kunnen zijn. Beveiligde variabelen beginnen met een enkel onderstrepingsteken.

Wat is inkapseling

Dus nu je weet hoe toegangsmodificatoren werken, zal dit volgende deel vrij duidelijk lijken. Inkapseling is het proces waarbij privévariabelen binnen klassen worden gebruikt om onbedoelde of potentieel kwaadwillende wijziging van gegevens te voorkomen. Door variabelen binnen een klasse te bevatten en te beschermen, kunnen de klasse en de objecten die het maakt, functioneren als onafhankelijke, op zichzelf staande onderdelen die binnen de machine van het programma zelf functioneren..
Door middel van inkapseling kunnen variabelen en bepaalde methoden alleen worden gebruikt via de interfaces die door de klasse zelf zijn aangewezen.

Setters en Getters

De interfaces die worden gebruikt voor interactie met ingekapselde variabelen worden over het algemeen setter- en getter-methoden genoemd, omdat ze worden gebruikt om de waarden van variabelen in te stellen en op te halen. Omdat er methoden bestaan ​​binnen een klasse of object, kunnen ze privévariabelen openen en wijzigen, terwijl u dit niet van buiten de klasse kunt doen. Toen u uw mijn auto object, gebruikte je in wezen de constructor ervan als een initiële setter-methode. Probeer een aantal methoden te schrijven om de waarde van een van de mijn auto variabelen.
 def set_model (zelf, nieuw_model): zelf .__ model = nieuw_model def get_model (zelf): retourneer zelf .__ model 
Het lijkt misschien veel extra werk, maar het is helemaal niet moeilijk. In het algemeen is dit hoe u uw klassen moet structureren en met klassenvariabelen moet werken.

Gedachten sluiten

Inkapseling is een belangrijk onderdeel van Object Oriented Programming. Het is een groot deel van wat ervoor zorgt dat objecten bij het programmeren meer presteren als fysieke objecten in de echte wereld. Het dient ook om de gegevens die in uw objecten zijn opgeslagen te beschermen en biedt controle en conventies voor hoe u om moet gaan met de gegevensstroom in en uit klassen.

Opdrachten

  1. Maak alle variabelen in het Auto klasse privé.
  2. Probeer er een van buiten de klas af te drukken.
  3. Wijzig het move_forward methode om de private variabele te gebruiken model-, en noem het.
  4. Maak een setter-methode voor een van de variabelen.
  5. Gebruik de setter-methode die u hebt gemaakt om de waarde van een variabele te wijzigen.
  6. Maak een getter-methode voor dezelfde variabele als de setter-methode.
  7. Gebruik uw getter-methode om die variabele te openen en af ​​te drukken.



Niemand heeft nog op dit artikel gereageerd.

Een verzameling nuttige informatie over het Linux-besturingssysteem en nieuwe technologieën
Nieuwe artikelen, praktische tips, gedetailleerde recensies en handleidingen. Voel je thuis in de wereld van het Linux-besturingssysteem