Uit de cursus: Basisbeginselen van programmeren: voorbeelden uit de echte wereld

Objecten benoemen

- Als we objecten in onze programma's maken en gebruiken, hebben we een manier nodig om ernaar te verwijzen. En dit kan worden bereikt door namen aan die objecten te binden. Neem bijvoorbeeld dit shirt. Het is een effen kleur, dus ik ga de naam rood shirt gebruiken om ernaar te verwijzen. Als ik het rode shirt draag, betekent dit dat ik dit specifieke object draag. Nu is rood shirt zelf geen object, rood shirt is gewoon een naam die ik gebruik om naar dit specifieke object te verwijzen. En net als in het echte leven is het mogelijk om meerdere namen voor hetzelfde object te hebben. - Ah, je karmozijnrode shirt, ik vind het leuk! - Zoals je kunt zien heeft Olivia een andere naam voor mijn shirt. - Het is een karmozijnrood shirt. - Ik weet niet zeker wat karmozijnrood is, dus ik noem dit mijn rode shirt. We hebben twee verschillende namen die we gebruiken om naar hetzelfde object te verwijzen, maar er is alleen dit ene shirt. Dat betekent dat als ik sap op het rode shirt mors... - Het karmozijnrode shirt vies en plakkerig is. En als ik besluit om het karmozijnrode shirt in de wasmachine te gooien ... - Dan wordt het rode shirt schoongemaakt. Ongeacht welke naam we gebruiken om naar dit shirtobject te verwijzen, we gebruiken en wijzigen allebei exact hetzelfde. Wanneer we een van die namen gebruiken om het object te wijzigen, wordt die wijziging weerspiegeld in alle andere namen die eraan gebonden zijn. Ah, ik hou van je stijl. - Ik kreeg mijn eigen karmozijnrode shirt. - En ik heb mijn rode shirt nog. Nu dragen we identieke shirts. Deze twee shirts zijn gelijk, maar ze zijn niet hetzelfde. En dit is een belangrijk onderscheid omdat we twee shirtobjecten kunnen hebben die dezelfde attributen hebben, maar het zijn twee afzonderlijke en unieke objecten waarnaar met verschillende namen wordt verwezen. Dus als ik sap op mijn rode shirt mors... Oh! - En ik gooi mijn karmozijnrode shirt in de wasmachine... - Het rode shirt is nog steeds vies en plakkerig. Omdat we twee afzonderlijke voorwerpen hadden die we met verschillende namen noemden, had Olivia, toen ze het karmozijnrode shirt waste, geen effect op het rode shirt. Dit voorbeeldscript met de naam start_02_03_naming_shirts uit de oefenbestanden bevat de klassendefinitie voor een basisshirtobject. Wanneer ik een nieuw shirt maak, zal de init-methode het clean attribuut initialiseren naar True, omdat een gloednieuw shirt schoon moet zijn wanneer ik het krijg. Er zijn methoden om virtueel sap op een shirt te morsen en het te wassen, make_dirty en make_clean die elk de waarde van het schone attribuut dienovereenkomstig veranderen. Ik zal het script uitvoeren om de klasse in de Python-shell te laden, zodat ik het kan gebruiken om een nieuw shirtobject te maken. Om te beginnen maak ik een nieuw shirt en geef het de naam rood voor kort door gebruik te maken van de shirt constructor methode. De shirtconstructormethode creëerde en retourneerde een nieuw shirtobject dat vervolgens werd gebonden aan de naam rood. De naam rood bevat het shirt niet. Het is alleen de naam die verwijst naar het object dat ik zojuist heb gemaakt. De operator gelijkteken neemt elk object aan de rechterkant dat een bestaand object of de uitvoer van een functie kan zijn en bindt dat object aan de naam aan de linkerkant. Vervolgens geef ik het shirt met de naam rood een tweede naam, karmozijnrood. En dat kan ik doen door karmozijnrood = rood te typen. Als ik nu rood en karmozijnrood doorgeef aan de id-functie, kan ik zien dat ze exact hetzelfde object zijn omdat ze exact hetzelfde id-nummer hebben. De namen rood en karmozijnrood zijn beide gebonden aan hetzelfde shirtobject. Als ik red.clean typ om de status van het rode shirt te controleren, kan ik zien dat het schoon is en hetzelfde geldt voor het karmozijnrode shirt. Het is ook schoon. Nu zal ik de make_dirty methode gebruiken om wat sap op het rode shirt te morsen omdat ik onhandig ben. En als ik dan de status van het clean attribuut controleer, is het False. En zoals je zou verwachten, is het karmozijnrode shirt nu ook vies omdat het precies hetzelfde object is. Ik kan controleren of twee verschillende namen naar hetzelfde object verwijzen door de operator is te gebruiken die True of False retourneert, afhankelijk van of de twee objecten dezelfde id hebben. Dus in dit geval, als ik rood typ is karmozijnrood, krijg ik True terug omdat ze naar hetzelfde object verwijzen. Nu zal ik een nieuw shirtobject voor Olivia maken door de shirtconstructormethode opnieuw te gebruiken en het aan de naam karmozijnrood te binden. Als ik nu de id's van het rode shirt en het karmozijnrode shirt nog eens check, verwijst elke naam naar een ander object. Omdat ik een nieuw shirtobject heb gemaakt om aan de naam karmozijnrood te binden, begint het schoon, maar het rode shirt van eerder zal nog steeds vies zijn. Ik hou er niet van om vieze, vieze shirts te hebben, dus ik zal de make_clean-methode op het rode shirt gebruiken om het op te ruimen. Omdat de shirts twee afzonderlijke objecten zijn, werkte de make_clean methode alleen op het rode shirt, maar het karmozijnrode shirt was al schoon, dus nu heb ik twee schone shirts. Hoewel de shirts dezelfde waarde hebben voor het clean attribuut, als ik ze vergelijk met de operator is, retourneert het False omdat die twee namen nu naar verschillende objecten verwijzen.

Inhoud