Uit de cursus: Training over basisprincipes van Python

Klassen en objecten

(vrolijke muziek) - We hadden het al over een broodroosterfunctie, maar wat als we een hele keuken willen maken? Een keuken heeft vele mogelijkheden, roosteren, bakken, magnetron, afwassen en natuurlijk het allerbelangrijkste koffiezetapparaat. Deze verschillende keukenapparatuur hebben instellingen, de knop op de broodrooster, de vermogensinstelling van de magnetron. De vaatwasser zelf heeft verschillende standen en meerdere functies die van toepassing kunnen zijn op de vaat. Ik weet zeker dat we een heleboel functies en variabelen kunnen maken en ze ergens in een bestand kunnen gooien. Maar wat als we twee aparte keukens willen met verschillende mogelijkheden en apparaten? Wat als we een heel huis willen maken met een keuken, een wasruimte, een badkamer? Meerdere huizen, misschien een zonder wasruimte die zijn was moet uitbesteden aan een wasserette? Je kunt je voorstellen hoe deze systemen zouden leiden tot tientallen of honderden functies, duizenden variabelen, code die vrij snel lang en onbeheersbaar wordt. Gelukkig hebben programmeurs een hulpmiddel uitgevonden om met dit soort situaties om te gaan, de klas. Een Python-klasse is een geweldige manier om gerelateerde verzamelingen van functies en attributen gelabeld en georganiseerd te houden. Laten we naar de code gaan. De klassieke manier om klassen in programmeren te demonstreren is door dieren te gebruiken, dus laten we een klasse maken met de naam Hond. We moeten dus een klasse definiëren met een naam en je mag een hoofdletter gebruiken voor klassenamen. Dit is wat ze anders maakt dan variabele- en functienamen. Lessen beginnen meestal met hoofdletters. En omdat we een dubbele punt hebben getypt, geeft dit aan dat we naar de volgende regel gaan inspringen. En alles binnen dit streepje wordt onze klassedefinitie. Nu kunnen we beginnen met het definiëren van alle functies en attributen die een hond heeft. En de eerste functie die we willen definiëren is een speciale, de init-functie. Init staat voor initialisatie, en deze functie wordt aangeroepen wanneer een instantie van de klasse Dog wordt aangemaakt. Het heeft twee onderstrepingstekens aan weerszijden, en dit is een speciaal door Python gedefinieerd ding, dus de computer zal dit herkennen als de initialisatiefunctie. Dan gaan we een variabele doorgeven die zelf wordt genoemd. Deze variabele is het specifieke exemplaar van de Dog-klasse nadat we deze hebben geïnitialiseerd. En, nou ja, kijk maar, dit wordt zo logischer. We gaan hier een paar attributen en functies definiëren. We willen een hond maken met vier poten en een naam, en we zullen het Rover noemen. Dus naam is gelijk aan Rover en self.legs is gelijk aan vier. We gaan ook een functie maken met de naam spreken die schors afdrukt, schors afdrukt. Merk op dat ik de zelfvariabele heb doorgegeven aan de spreekfunctie. Dit betekent dat ik toegang heb tot elk van de attributen of functies in deze klasse. Ik zou bijvoorbeeld dit kunnen doen, self.name bovendien, zegt bark. En dit zal de naam van de hond samenvoegen met deze reeks hier. Laten we nu deze klasse gebruiken. Laten we dat gewoon uitvoeren. En dan is mijn hond gelijk aan hond. Dus mijn hond is gelijk aan een instantie, een nieuw gecreëerd exemplaar van de klasse Hond. Nu is dit in tekst met de haakjes waardoor het een beetje op een functie lijkt, maar Hond is een klasse, geen functie. En daarom is het belangrijk om je te houden aan de Python-conventie om variabelen en functienamen in kleine letters te houden en alleen klassenamen met een hoofdletter te schrijven, zodat je het verschil tussen de twee kunt zien. Wanneer we dit doen, wordt de initialisatiefunctie aangeroepen en krijgen we een exemplaar van onze Dog-klasse terug. We kunnen een andere hond creëren. Het is gelijk aan hond. Oké, dus nu hebben we mijn hond en nog een hond. Dus laten we my_dog.speak doen. Rover zegt blaffen. En another_dog.spreken. Ah. Het is altijd mogelijk om twee honden te hebben met de naam Rover, het is een veel voorkomende naam, maar dit begint een beetje verwarrend te worden. Wat als we honden verschillende namen willen geven en we willen misschien een naam geven wanneer we de hond initialiseren? Het enige wat we hoeven te doen is dit, een naamvariabele doorgeven en zeggen self.name gelijk is aan naam. Wanneer we vervolgens elke hond maken, geven we de naam door, Rover en Fluffy. Rover zegt blaffen en Fluffy zegt blaffen. Veel beter. Merk op dat de spreekfunctie, wanneer je hem belt, lijkt alsof hij geen argumenten heeft. Er wordt niets doorgegeven tussen deze haakjes. Maar als we kijken naar de functiedefinitie in de klasse, dan heeft die wel één argument, zelf. En de manier waarop Python werkt, is dat als je een klasse-instantie hebt, zoals deze twee dingen instanties zijn van de klasse Dog, en je gebruikt de syntaxis van de puntfunctie, het zich gedraagt alsof je instantie daadwerkelijk is doorgegeven als de eerste variabele van deze functie. Dus deze zelfvariabele is hier letterlijk het voorbeeld van de klasse waarop de functie werd aangeroepen. Dus als je al eerder van de term objectgeoriënteerd programmeren hebt gehoord, dan is dit wat het is. Deze klasse-instanties worden ook wel objecten genoemd. Dit zijn hondenobjecten. De variabelen binnen deze klassen worden attributen genoemd, attributen van de objecten. De functies hier worden methoden genoemd en je kunt ze klassemethoden noemen. We zeggen dat het Hond-object de methode heeft om te spreken. Dit is dus een zeer korte inleiding tot enkele van de concepten en terminologie van objectgeoriënteerd programmeren, maar ik ga later echt laten zien hoe krachtig ze kunnen zijn.

Inhoud