1 00:00:05,000 --> 00:00:13,900 Hallo - Python-Programmierung - Alles ist eine Klasse 2 00:00:14,000 --> 00:00:18,900 In Python haben Klassen eine noch viel grundlegendere Bedeutung 3 00:00:19,000 --> 00:00:27,900 denn alle Datentypen (Zeichenketten, Ganz- und Fliesskommazahlen, Listen oder Dictionaries) sind in Python Objekte 4 00:00:28,000 --> 00:00:31,900 Es gibt also auch entsprechende Klassen, von denen geerbt werden kann 5 00:00:32,000 --> 00:00:37,900 Hier etwa wird von der Klasse unicode geerbt 6 00:00:38,000 --> 00:00:41,900 Unicode-Objekte koennen wie folgt erstellt werden 7 00:00:42,000 --> 00:00:45,900 siehe Zeile 11 und Zeile 12 8 00:00:46,000 --> 00:00:51,900 Einmal mit der Funktion unicode() und einmal mit dem u vor der Zeichenkette 9 00:00:52,000 --> 00:00:58,900 In beiden Faellen wird also eine Unicode-Zeichenkette mit dem Inhalt Hallo erstellt 10 00:00:59,000 --> 00:01:01,900 Beide Aufrufe sind aequivalent 11 00:01:02,000 --> 00:01:08,900 Die neue Klasse BoxiCode erbt von unicode und fuegt lediglich eine Methode hinzu 12 00:01:09,000 --> 00:01:12,900 das altbekannte boxify() 13 00:01:13,000 --> 00:01:23,900 Speichern und Ausfuehren - python BoxiCode.py 14 00:01:24,000 --> 00:01:29,900 BoxiCode hat offensichtlich saemtliche Methoden von unicode geerbt 15 00:01:30,000 --> 00:01:34,900 im Beispiel an der Methode lower() zu sehen 16 00:01:35,000 --> 00:01:42,900 Zusaetzlich gibt es nun aber eine Methode, um den jeweiligen Text in einer ASCII-Box anzeigen zu lassen 17 00:01:43,000 --> 00:02:03,900 Das Ergebnis von Zeile 11 - das Ergebnis von Zeile 12 und das Ergebnis von Zeile 15,16,17 18 00:02:04,000 --> 00:02:14,900 Auf gleiche Weise koennte man eine Listenklasse erstellen, die zusaetzliche Methoden hat 19 00:02:15,000 --> 00:02:18,900 Oder eine Ganzzahlklasse mit zusaetzlichen Methoden 20 00:02:19,000 --> 00:02:25,900 so z.B. Zeile 19,20,21 21 00:02:26,000 --> 00:02:39,900 Die neue Klasse SuperInt erbt von int und hat die neue Methode iseven() 22 00:02:40,000 --> 00:02:49,900 Diese gibt True zurueck, wenn die jeweilige Zahl ohne Rest durch 2 teilbar ist 23 00:02:50,000 --> 00:02:59,900 In den Zeilen 23 und 24 werden zwei SuperInt-Objekte erstellt 24 00:03:00,000 --> 00:03:05,900 Es wird gezeigt, dass die neue Methode wie erwartet arbeitet 25 00:03:06,000 --> 00:03:09,900 15 ist ungerade, 16 gerade 26 00:03:10,000 --> 00:03:17,900 Nochmal Speichern und Ausfuehren 27 00:03:18,000 --> 00:03:28,900 In Zeile 27 werden die beiden SuperInt-Objekte addiert und das Ergebnis wird an den Namen z gebunden 28 00:03:29,000 --> 00:03:35,900 Beim Versuch, auch hier die Methode iseven() aufzurufen, kommt es zu einem Fehler 29 00:03:36,000 --> 00:03:50,900 Offensichtlich handelt es sich bei dem neu erstellten Objekt, das die Summe von x und y repraesentiert 30 00:03:51,000 --> 00:03:55,900 nicht mehr um ein von SuperInt abgeleitetes Objekt 31 00:03:56,000 --> 00:04:02,900 Es handelt sich um ein einfaches int-Objekt und das kennt die Methode iseven() nicht 32 00:04:03,000 --> 00:04:07,900 Das haengt mit der Art und Weise zusammen, wie Python Ganzzahl-Objekte addiert 33 00:04:03,000 --> 00:04:18,900 Der Aufruf 3 + 5 wird intern als 3.__add__(5) interpretiert 34 00:04:19,000 --> 00:04:26,900 Es wird also die Methode __add__ der links stehenden Ganzzahl aufgerufen 35 00:04:27,000 --> 00:04:29,900 Diese Methode erstellt ein neues int-Objekt 36 00:04:30,000 --> 00:04:33,900 Soll nun stattdessen ein neues SuperInt-Objekt erstellt werden 37 00:04:34,000 --> 00:04:42,900 muesste die Methode __add__ in der SuperInt-Klasse neue implementiert werden 38 00:04:43,000 --> 00:04:50,900 Da es aber auch Methoden fuer Subtraktion, Division, Multiplikationen und viele andere mathematische Operationen gibt 39 00:04:51,000 --> 00:04:55,900 wuerde dies in viel (fehlertraechtige) Arbeit ausarten 40 00:04:56,000 --> 00:05:02,900 Dieses Beispiel soll veranschaulichen, dass das Erweitern von Datentypen in Python prinzipiell moeglich ist 41 00:05:03,000 --> 00:05:05,900 und manchmal durchaus sinnvoll sein kann 42 00:05:06,000 --> 00:05:16,900 Es kann aber auch zu schwer nachvollziehbaren Fehlern fuehren und erschwert das Lesen des Quelltextes unter Umstaenden enorm 43 00:05:17,000 --> 00:05:25,900 Methoden wie boxify() oder iseven() sollten daher immer als unabhaengige Funktionen umgesetzt werden 44 00:05:26,000 --> 00:05:33,900 Fuer Anfaenger gilt also: Nicht von Basisdatentypen erben, keine Spezialmethoden implementieren! 45 00:05:36,000 --> 00:05:38,900 Tschau und viel Glueck 46 00:05:39,000 --> 00:05:39,001 Textquelle: http://www.freiesmagazin.de/freiesMagazin-2011-01 - Python – Teil 4: Klassenunterschiede“ von Daniel Noegel 47 00:05:39,002 --> 00:05:39,003 Dieses Untertitel-Dokument (.srt) steht unter der Lizenz: http://creativecommons.org/licenses/by-sa/3.0/