Das Buch „Wie Python funktioniert. Leitfaden für Entwickler, Programmierer und Interessierte “

Bild Hallo habrozhiteli! Wir haben kürzlich ein neues Buch über Python veröffentlicht. Wir bieten Ihnen an, sich sofort mit dem Informationsmaterial vertraut zu machen.

Auszug. 7.4. IDLE verwenden


Da IDLE REPL enthält, können Sie den obigen Code eingeben und direkt in REPL analysieren. Sie können jedoch auch Code schreiben, ausführen und in REPL analysieren. Um diese Funktion zu testen, öffnen Sie eine neue Datei und fügen Sie den folgenden Code hinzu:

name = "Matt" first = name age = 1000 print(id(age)) age = age + 1 print(id(age)) names = [] print(id(names)) names.append("Fred") print(id(names)) 

Speichern Sie den Code in einer Datei namens iden.py. Führen Sie die Datei aus. Drücken Sie dazu im Leerlauf die Taste F5. In REPL werden vier Zahlen angezeigt. Die ersten beiden werden unterschiedlich sein; Dies deutet darauf hin, dass die Ganzzahl unveränderlich ist. Die letzten beiden Zahlen sind gleich. Dies liegt daran, dass die Kennung trotz Änderung der Namensliste dieselbe bleibt. Im Allgemeinen ist diese Tatsache nichts grundlegend Neues.

Das Interessanteste: Wenn Sie den Befehl dir () in REPL eingeben, wird eine Liste der Variablen angezeigt. Sie werden sehen, dass globale Variablen aus iden.py jetzt verfügbar sind.

REPL in IDLE bietet Zugriff auf alle globalen Variablen. Sie können Namen und Namen nachschlagen und sogar Funktionen oder Methoden aufrufen - zum Beispiel names.append ("George").

Wenn Sie die Möglichkeit haben, die Ergebnisse des gerade ausgeführten Codes zu studieren, können Sie den Code schnell analysieren und damit experimentieren. Erfahrene Python-Entwickler schreiben häufig Code in REPL, fügen ihn in eine Datei ein, führen die Datei erneut aus, schreiben neuen Code in REPL und schreiben weiterhin Code auf diese Weise.

Bild

Bild

Bild

Auszug. 22. Unterklasse


Neben der Gruppierung von Status und Operationen bieten Klassen auch die Wiederverwendung von Code. Wenn Sie bereits eine Klasse haben und eine andere Klasse mit etwas anderem Verhalten benötigen, besteht eine Möglichkeit zur Wiederverwendung in der Unterklasse. Die Klasse, von der aus die Unterklasse ausgeführt wird, wird als Oberklasse bezeichnet (ein anderer gebräuchlicher Name für die Oberklasse ist die übergeordnete Klasse).

Angenommen, Sie möchten einen Stuhl für sechs Skifahrer erstellen. Um die Chair6-Klasse zu erstellen, die einen Stuhl für sechs Personen simuliert, eine speziellere Version von Chair, können Sie Unterklassen verwenden. Unterklassen ermöglichen es dem Programmierer, die Methoden der übergeordneten Klassen zu erben und die Methoden zu überschreiben, die geändert werden müssen.

Das Folgende ist die Chair6-Klasse, die eine Unterklasse von CorrectChair ist:

 >>> class Chair6(CorrectChair): ... max_occupants = 6 

Hinweis: Die übergeordnete Klasse von CorrectChair steht nach dem Klassennamen in Klammern. Beachten Sie, dass Chair6 keinen Konstruktor in seinem Hauptteil definiert. Sie können jedoch Instanzen der Klasse erstellen:

 >>> sixer = Chair6(76) 

Wie erstellt Python ein Objekt, wenn in der Klasse kein Konstruktor definiert ist? Folgendes passiert: Wenn Python nach der Methode .__ init__ sucht, beginnt die Suche mit Chair6. Da die Chair6-Klasse nur das Attribut max_occupants enthält, findet Python die Methode .__ init__ hier nicht. Da Chair6 eine Unterklasse von CorrectChair ist, verfügt es über das Attribut __bases__, in dem die im Tupel zusammengefassten Basisklassen aufgeführt sind:

Bild

Bild

 >>> Chair6.__bases__ (__main__.CorrectChair,) 

Dann sucht Python in den Basisklassen nach dem Konstruktor. Er findet den Konstruktor in CorrectChair und erstellt damit eine neue Klasse.

Die gleiche Suche findet statt, wenn .load für eine Instanz aufgerufen wird. Die Instanz hat kein Attribut, das dem Methodennamen entspricht, daher überprüft Python die Instanzklasse. Chair6 hat auch keine .load-Methode, daher sucht Python nach einem Attribut in der CorrectChair-Basisklasse. Hier wird die .load-Methode mit einem zu großen Wert aufgerufen, was zu einem ValueError-Fehler führt:

 >>> sixer.load(7) Traceback (most recent call last): File "/tmp/chair.py", line 30, in <module> sixer.load(7) File "/tmp/chair.py", line 13, in load new_val = self._check(self.count + number) File "/tmp/chair.py", line 23, in _check number)) ValueError: Invalid count:7 

Python findet die Methode in der Basisklasse, aber das Aufrufen der Methode ._check führt zu einem ValueError-Fehler.

22.1. Stopps zählen


Manchmal steigt der Skifahrer nicht richtig in den Lift. In solchen Fällen verlangsamt oder stoppt der Fahrer den Lift, um dem Skifahrer zu helfen. Wir können Python verwenden, um eine neue Klasse zu erstellen, die die Anzahl solcher Stopps zählt.

Angenommen, jeder Aufruf von .load ruft eine Funktion auf, die eine logische Anzeige zurückgibt, ob ein Stopp aufgetreten ist oder nicht. In den Funktionsparametern werden die Anzahl der Skifahrer und das Stuhlobjekt übertragen.

Das Folgende ist die Klasse, die die Funktion is_stalled im Konstruktor erhält. Diese Funktion wird jedes Mal aufgerufen, wenn .load aufgerufen wird:

 >>> class StallChair(CorrectChair): ... def __init__(self, id, is_stalled): ... super().__init__(id) ... self.is_stalled = is_stalled ... self.stalls = 0 ... ... def load(self, number): ... if self.is_stalled(number, self): ... self.stalls += 1 ... super().load(number) 

Um eine Instanz dieser Klasse zu erstellen, müssen Sie die Funktion is_stalled bereitstellen. Die folgende einfache Funktion generiert in 10% der Fälle Stopps:

 >>> import random >>> def ten_percent(number, chair): ... """Return True 10% of time""" ... return random.random() < .1 

Jetzt können Sie eine Instanz erstellen, indem Sie die Funktion ten_percent als Parameter is_stalled angeben:

 >>> stall42 = StallChair(42, ten_percent) 

22.2. super


Denken Sie daran, dass StallChair eine eigene .__ init__ -Methode definiert, die beim Erstellen einer Instanz aufgerufen wird. Hinweis: Die erste Zeile des Konstruktors sieht folgendermaßen aus:

 super().__init__(id) 

Wenn Sie innerhalb der Methode super aufrufen, erhalten Sie Zugriff auf die richtige übergeordnete Klasse.

Über eine Zeile im Konstruktor können Sie den CorrectChair-Konstruktor aufrufen. Anstatt die Logik zum Zuweisen der Attribute id und count zu wiederholen, können Sie die Logik der übergeordneten Klasse verwenden. Da StallChair zusätzliche Attribute hat, die für die Instanz festgelegt werden müssen, kann dies nach dem Aufruf des übergeordneten Konstruktors erfolgen.

Bild

Die .load-Methode enthält auch einen Aufruf von super:

 def load(self, number): if self.is_stalled(number, self): self.stalls += 1 super().load(number) 

In der .load-Methode rufen Sie die Funktion is_stalled auf, um festzustellen, ob der Lift angehalten hat, und übertragen dann die Steuerung der ursprünglichen .load-Funktionalität von CorrectChair mithilfe von super.

Durch das Platzieren von allgemeinem Code an einer Stelle (in der Basisklasse) wird die Anzahl der Fehler und das Duplizieren von Code verringert.

Über den Autor


Matt Harrison verwendet Python seit 2000. Er leitet MetaSnake, ein Beratungs- und Unternehmensschulungsunternehmen für Python- und Datenanalysetheorie. In der Vergangenheit war er in den Bereichen Forschung, Montage- und Testmanagement, Business Intelligence und Datenspeicherung tätig.

Er hat Präsentationen und Schulungsvorträge auf Konferenzen wie Strata, SciPy, SCALE, PyCON und OSCON sowie auf lokalen Benutzerkonferenzen gehalten. Die Struktur und das Material dieses Buches basieren auf seinen praktischen Erfahrungen im Unterrichten von Python. Matt veröffentlicht regelmäßig nützliche Python-bezogene Informationen auf Twitter (@__mharrison__).

Wissenschaftliche Redakteure


Roger A. Davidson ist derzeit Dekan des Fachbereichs Mathematik am American River College in Sacramento, Kalifornien. Seine Doktorarbeit wurde zum Thema Luft- und Raumfahrttechnik verfasst, er verfügt jedoch auch über Diplome in Informatik, Elektrotechnik und Systemtechnik und hat kürzlich ein Zertifikat in Datenwissenschaft erhalten (was seine Faszination für Python begann). Während seiner Karriere hat Roger für die NASA, für Fortune 50-Unternehmen, Startups und Community Colleges gearbeitet. Er ist begeistert von Bildung, Wissenschaft (nicht nur Datenverarbeitung), Blackberry Pies und der Führung heterogener Teams bei der Lösung großer Probleme.

Andrew McLaughlin (AndrewMcLaughlin) - Programmierer und Designer, Systemadministrator am Morgen und Familienvater am Nachmittag. Aufgrund seiner Liebe zum Detail ist er seit 1998 in der Webprogrammierung tätig. Andrew ist Gewinner der George Fox University Honours und hat einen Abschluss in Management und Informationssystemen. In seiner Freizeit unternimmt er mit seiner Frau und seinen zwei Kindern Campingausflüge und arbeitet manchmal auch in einer Tischlerei (alle Finger sind noch an Ort und Stelle). Lesen Sie seine Twitter-Beiträge: @amclaughlin.

»Weitere Informationen zum Buch finden Sie auf der Website des Herausgebers
» Inhalt
» Auszug

Für Habrozhitelami 20% Rabatt auf den Gutschein - Python .

Source: https://habr.com/ru/post/de433534/


All Articles