Python                 OOP                          PyDev                  Fazit




                   Alternative objektorientiere
                     Programmiersprachen
                             Python & PyDev


                             David Robakowski

                             Fachhochschule Wedel


                               Juli 11, 2009




David Robakowski                                            Fachhochschule Wedel
Python & PyDev
Python                        OOP          PyDev                      Fazit




Gliederung



         1 Python                   2 OOP
             Geschichte                 Objektsystem
             Eigenschaften              Klassen
             Sprachumfang               Vererbung
             Paradigmen                 Metaklassen
             Einsatzgebiete         3 PyDev
             Vor- und Nachteile         Zu PyDev
                                    4 Fazit
                                        Mein Fazit




David Robakowski                                       Fachhochschule Wedel
Python & PyDev
Python                        OOP          PyDev                      Fazit

Geschichte



Gliederung



         1 Python                   2 OOP
             Geschichte                 Objektsystem
             Eigenschaften              Klassen
             Sprachumfang               Vererbung
             Paradigmen                 Metaklassen
             Einsatzgebiete         3 PyDev
             Vor- und Nachteile         Zu PyDev
                                    4 Fazit
                                        Mein Fazit




David Robakowski                                       Fachhochschule Wedel
Python & PyDev
Python                          OOP                    PyDev                         Fazit

Geschichte



Zur Geschichte von Python
                 Entwickelt Anfang der 90er Jahre von Guido van Rossum am
                 Zentrum für Mathematik und Informatik in Amsterdam




David Robakowski                                                      Fachhochschule Wedel
Python & PyDev
Python                          OOP                     PyDev                          Fazit

Geschichte



Zur Geschichte von Python
                 Entwickelt Anfang der 90er Jahre von Guido van Rossum am
                 Zentrum für Mathematik und Informatik in Amsterdam
                 Wurde ursprünglich für das verteilte Betriebssystem Amoeba
                 entwickelt, als Nachfolger für die Lehrsprache ABC




David Robakowski                                                        Fachhochschule Wedel
Python & PyDev
Python                          OOP                     PyDev                          Fazit

Geschichte



Zur Geschichte von Python
                 Entwickelt Anfang der 90er Jahre von Guido van Rossum am
                 Zentrum für Mathematik und Informatik in Amsterdam
                 Wurde ursprünglich für das verteilte Betriebssystem Amoeba
                 entwickelt, als Nachfolger für die Lehrsprache ABC
                 Namensherkunft: Britische Komikergruppe „Monty Python“




David Robakowski                                                        Fachhochschule Wedel
Python & PyDev
Python                        OOP          PyDev                      Fazit

Eigenschaften



Gliederung



         1 Python                   2 OOP
             Geschichte                 Objektsystem
             Eigenschaften              Klassen
             Sprachumfang               Vererbung
             Paradigmen                 Metaklassen
             Einsatzgebiete         3 PyDev
             Vor- und Nachteile         Zu PyDev
                                    4 Fazit
                                        Mein Fazit




David Robakowski                                       Fachhochschule Wedel
Python & PyDev
Python             OOP                    PyDev                       Fazit

Eigenschaften



Eigenschaften von Python
                    Simpel Schnell, einfach und
                           übersichtlich(Einrückung)
                           programmieren




David Robakowski                                       Fachhochschule Wedel
Python & PyDev
Python                     OOP                    PyDev                       Fazit

Eigenschaften



Eigenschaften von Python
                            Simpel Schnell, einfach und
                                   übersichtlich(Einrückung)
                                   programmieren
         Höhere Programmiersprache Garbage-Collector




David Robakowski                                               Fachhochschule Wedel
Python & PyDev
Python                     OOP                    PyDev                         Fazit

Eigenschaften



Eigenschaften von Python
                            Simpel Schnell, einfach und
                                   übersichtlich(Einrückung)
                                   programmieren
         Höhere Programmiersprache Garbage-Collector
                       Bibliotheken Umfangreiche Bibliotheken aus den
                                    unterschiedlichsten Bereichen: z.B.
                                    Datenbanken, Audio/Video, GUI, Web,
                                    ...




David Robakowski                                                 Fachhochschule Wedel
Python & PyDev
Python                     OOP                     PyDev                          Fazit

Eigenschaften



Eigenschaften von Python
                            Simpel Schnell, einfach und
                                   übersichtlich(Einrückung)
                                   programmieren
         Höhere Programmiersprache Garbage-Collector
                       Bibliotheken Umfangreiche Bibliotheken aus den
                                    unterschiedlichsten Bereichen: z.B.
                                    Datenbanken, Audio/Video, GUI, Web,
                                    ...
                           Portabel Linux/Unix, Windows, Mac, OS 2, ...




David Robakowski                                                   Fachhochschule Wedel
Python & PyDev
Python                     OOP                      PyDev                          Fazit

Eigenschaften



Eigenschaften von Python
                            Simpel Schnell, einfach und
                                   übersichtlich(Einrückung)
                                   programmieren
         Höhere Programmiersprache Garbage-Collector
                       Bibliotheken Umfangreiche Bibliotheken aus den
                                    unterschiedlichsten Bereichen: z.B.
                                    Datenbanken, Audio/Video, GUI, Web,
                                    ...
                           Portabel Linux/Unix, Windows, Mac, OS 2, ...
                        Interpretiert Zwischencode wird von Interpreter
                                      ausgeführt




David Robakowski                                                    Fachhochschule Wedel
Python & PyDev
Python                       OOP                     PyDev                  Fazit

Eigenschaften



Eigenschaften von Python II
         Objektorientiert Sehr flexibel und mächtig




David Robakowski                                             Fachhochschule Wedel
Python & PyDev
Python                            OOP                     PyDev                         Fazit

Eigenschaften



Eigenschaften von Python II
         Objektorientiert Sehr flexibel und mächtig
                 Erweiterbar z.B. durch C/C++ Bibliotheken, falls mehr
                             Performance benötigt wird




David Robakowski                                                         Fachhochschule Wedel
Python & PyDev
Python                           OOP                    PyDev                         Fazit

Eigenschaften



Eigenschaften von Python II
         Objektorientiert Sehr flexibel und mächtig
                 Erweiterbar z.B. durch C/C++ Bibliotheken, falls mehr
                              Performance benötigt wird
                 Integrierbar Integration in andere Programmierumgebungen wie
                              z.B. .Net, Java, COM, CORBA, C und C++




David Robakowski                                                       Fachhochschule Wedel
Python & PyDev
Python                           OOP                    PyDev                         Fazit

Eigenschaften



Eigenschaften von Python II
         Objektorientiert Sehr flexibel und mächtig
                 Erweiterbar z.B. durch C/C++ Bibliotheken, falls mehr
                              Performance benötigt wird
                 Integrierbar Integration in andere Programmierumgebungen wie
                              z.B. .Net, Java, COM, CORBA, C und C++
                   Dynamik Dynamik durch Möglichkeit des Mischens
                           unterschiedlicher Programmierparadigmen




David Robakowski                                                       Fachhochschule Wedel
Python & PyDev
Python                           OOP                    PyDev                         Fazit

Eigenschaften



Eigenschaften von Python II
         Objektorientiert Sehr flexibel und mächtig
                 Erweiterbar z.B. durch C/C++ Bibliotheken, falls mehr
                              Performance benötigt wird
                 Integrierbar Integration in andere Programmierumgebungen wie
                              z.B. .Net, Java, COM, CORBA, C und C++
                   Dynamik Dynamik durch Möglichkeit des Mischens
                           unterschiedlicher Programmierparadigmen
            Open Source Große Community




David Robakowski                                                       Fachhochschule Wedel
Python & PyDev
Python                        OOP          PyDev                      Fazit

Sprachumfang



Gliederung



         1 Python                   2 OOP
             Geschichte                 Objektsystem
             Eigenschaften              Klassen
             Sprachumfang               Vererbung
             Paradigmen                 Metaklassen
             Einsatzgebiete         3 PyDev
             Vor- und Nachteile         Zu PyDev
                                    4 Fazit
                                        Mein Fazit




David Robakowski                                       Fachhochschule Wedel
Python & PyDev
Python                      OOP             PyDev                             Fazit

Sprachumfang



Sprachumfang

         Sprachelemente

                 False            else              lambda
                 None             except            nonlocal
                 True             exec              not
                 and              finally           or
                 assert           for               pass
                 break            from              raise
                 class            global            return
                 continue         if                try
                 def              import            while
                 del              in                with
                 elif             is                yield



David Robakowski                                               Fachhochschule Wedel
Python & PyDev
Python                            OOP                      PyDev                            Fazit

Sprachumfang



Datentypen
                 Python ist dynamisch getypt, es gibt also keine explizite
                 Datentypdeklaration




David Robakowski                                                             Fachhochschule Wedel
Python & PyDev
Python                            OOP                      PyDev                            Fazit

Sprachumfang



Datentypen
                 Python ist dynamisch getypt, es gibt also keine explizite
                 Datentypdeklaration
                 ...jedoch streng getypt




David Robakowski                                                             Fachhochschule Wedel
Python & PyDev
Python                            OOP                      PyDev                            Fazit

Sprachumfang



Datentypen
                 Python ist dynamisch getypt, es gibt also keine explizite
                 Datentypdeklaration
                 ...jedoch streng getypt
                 Alle Datentypen sind Objekte




David Robakowski                                                             Fachhochschule Wedel
Python & PyDev
Python                            OOP                      PyDev                            Fazit

Sprachumfang



Datentypen
                 Python ist dynamisch getypt, es gibt also keine explizite
                 Datentypdeklaration
                 ...jedoch streng getypt
                 Alle Datentypen sind Objekte
                 Werden auch built-in types bezeichnet




David Robakowski                                                             Fachhochschule Wedel
Python & PyDev
Python                            OOP                      PyDev                            Fazit

Sprachumfang



Datentypen
                 Python ist dynamisch getypt, es gibt also keine explizite
                 Datentypdeklaration
                 ...jedoch streng getypt
                 Alle Datentypen sind Objekte
                 Werden auch built-in types bezeichnet
                 Die Klasse object bildet dabei die Oberklasse von allen Typen
                 und new-style Klassen




David Robakowski                                                             Fachhochschule Wedel
Python & PyDev
Python                            OOP                       PyDev                           Fazit

Sprachumfang



Datentypen II
                 Python besitzt für die unterschiedlichsten Gebiete „built-in types“:




David Robakowski                                                             Fachhochschule Wedel
Python & PyDev
Python                            OOP                       PyDev                           Fazit

Sprachumfang



Datentypen II
                 Python besitzt für die unterschiedlichsten Gebiete „built-in types“:
                   Numerische: int, float, komplexe Zahlen




David Robakowski                                                             Fachhochschule Wedel
Python & PyDev
Python                            OOP                       PyDev                           Fazit

Sprachumfang



Datentypen II
                 Python besitzt für die unterschiedlichsten Gebiete „built-in types“:
                   Numerische: int, float, komplexe Zahlen
                    Sequenzen: string, tupel, list




David Robakowski                                                             Fachhochschule Wedel
Python & PyDev
Python                            OOP                       PyDev                           Fazit

Sprachumfang



Datentypen II
                 Python besitzt für die unterschiedlichsten Gebiete „built-in types“:
                   Numerische: int, float, komplexe Zahlen
                    Sequenzen: string, tupel, list
                       Mengen: set, frozenset




David Robakowski                                                             Fachhochschule Wedel
Python & PyDev
Python                            OOP                       PyDev                           Fazit

Sprachumfang



Datentypen II
                 Python besitzt für die unterschiedlichsten Gebiete „built-in types“:
                   Numerische: int, float, komplexe Zahlen
                    Sequenzen: string, tupel, list
                       Mengen: set, frozenset
                   Dictionaries: {key: value,...}




David Robakowski                                                             Fachhochschule Wedel
Python & PyDev
Python                            OOP                       PyDev                           Fazit

Sprachumfang



Datentypen II
                 Python besitzt für die unterschiedlichsten Gebiete „built-in types“:
                   Numerische: int, float, komplexe Zahlen
                    Sequenzen: string, tupel, list
                       Mengen: set, frozenset
                   Dictionaries: {key: value,...}
                 Verschiedenes: None, Callable, Boolean




David Robakowski                                                             Fachhochschule Wedel
Python & PyDev
Python                             OOP                       PyDev                           Fazit

Sprachumfang



Code Beispiel


         Connection String Builder [2]
         def buildConnectionString(params):
             """Build a connection string from a dictionary of parameters.

                 Returns string."""
                 return ";".join(["%s=%s" % (k, v) for k, v in params.items()])

         if __name__ == "__main__":
             myParams = {"server":"mpilgrim", 
                         "database":"master", 
                         "uid":"sa", 
                         "pwd":"secret" 
                         }
             print buildConnectionString(myParams)




David Robakowski                                                              Fachhochschule Wedel
Python & PyDev
Python                        OOP          PyDev                      Fazit

Paradigmen



Gliederung



         1 Python                   2 OOP
             Geschichte                 Objektsystem
             Eigenschaften              Klassen
             Sprachumfang               Vererbung
             Paradigmen                 Metaklassen
             Einsatzgebiete         3 PyDev
             Vor- und Nachteile         Zu PyDev
                                    4 Fazit
                                        Mein Fazit




David Robakowski                                       Fachhochschule Wedel
Python & PyDev
Python                             OOP        PyDev                  Fazit

Paradigmen



Programmierparadigmen
                 Vollständige Unterstützung




David Robakowski                                      Fachhochschule Wedel
Python & PyDev
Python                            OOP                      PyDev                           Fazit

Paradigmen



Programmierparadigmen
                 Vollständige Unterstützung
                     Strukturierter Programmierung Module, Prozeduren und Funktionen




David Robakowski                                                            Fachhochschule Wedel
Python & PyDev
Python                            OOP                      PyDev                           Fazit

Paradigmen



Programmierparadigmen
                 Vollständige Unterstützung
                     Strukturierter Programmierung Module, Prozeduren und Funktionen
                 Objektorientierter Programmierung Klassen, Vererbung, spezielle
                                                   Methoden...




David Robakowski                                                            Fachhochschule Wedel
Python & PyDev
Python                            OOP                      PyDev                           Fazit

Paradigmen



Programmierparadigmen
                 Vollständige Unterstützung
                     Strukturierter Programmierung Module, Prozeduren und Funktionen
                 Objektorientierter Programmierung Klassen, Vererbung, spezielle
                                                   Methoden...
                 Es gibt Spracheigenschaften aus




David Robakowski                                                            Fachhochschule Wedel
Python & PyDev
Python                            OOP                      PyDev                           Fazit

Paradigmen



Programmierparadigmen
                 Vollständige Unterstützung
                     Strukturierter Programmierung Module, Prozeduren und Funktionen
                 Objektorientierter Programmierung Klassen, Vererbung, spezielle
                                                   Methoden...
                 Es gibt Spracheigenschaften aus
                     Funktionaler Programmierung Funktionen, Blöcke, Rekursion,
                                                 Listen...




David Robakowski                                                            Fachhochschule Wedel
Python & PyDev
Python                            OOP                      PyDev                           Fazit

Paradigmen



Programmierparadigmen
                 Vollständige Unterstützung
                     Strukturierter Programmierung Module, Prozeduren und Funktionen
                 Objektorientierter Programmierung Klassen, Vererbung, spezielle
                                                   Methoden...
                 Es gibt Spracheigenschaften aus
                     Funktionaler Programmierung Funktionen, Blöcke, Rekursion,
                                                 Listen...
                 Python ist eine Multiparadigmen Sprache




David Robakowski                                                            Fachhochschule Wedel
Python & PyDev
Python                            OOP                       PyDev                           Fazit

Paradigmen



Programmierparadigmen
                 Vollständige Unterstützung
                     Strukturierter Programmierung Module, Prozeduren und Funktionen
                 Objektorientierter Programmierung Klassen, Vererbung, spezielle
                                                   Methoden...
                 Es gibt Spracheigenschaften aus
                     Funktionaler Programmierung Funktionen, Blöcke, Rekursion,
                                                 Listen...
                 Python ist eine Multiparadigmen Sprache
                     erlaubt dem Benutzer das für das aktuelle Problem am besten
                     passende Paradigma zu wählen




David Robakowski                                                             Fachhochschule Wedel
Python & PyDev
Python                            OOP                       PyDev                           Fazit

Paradigmen



Programmierparadigmen
                 Vollständige Unterstützung
                     Strukturierter Programmierung Module, Prozeduren und Funktionen
                 Objektorientierter Programmierung Klassen, Vererbung, spezielle
                                                   Methoden...
                 Es gibt Spracheigenschaften aus
                     Funktionaler Programmierung Funktionen, Blöcke, Rekursion,
                                                 Listen...
                 Python ist eine Multiparadigmen Sprache
                     erlaubt dem Benutzer das für das aktuelle Problem am besten
                     passende Paradigma zu wählen
                     der Benutzer kann mixen




David Robakowski                                                             Fachhochschule Wedel
Python & PyDev
Python                        OOP          PyDev                      Fazit

Einsatzgebiete



Gliederung



         1 Python                   2 OOP
             Geschichte                 Objektsystem
             Eigenschaften              Klassen
             Sprachumfang               Vererbung
             Paradigmen                 Metaklassen
             Einsatzgebiete         3 PyDev
             Vor- und Nachteile         Zu PyDev
                                    4 Fazit
                                        Mein Fazit




David Robakowski                                       Fachhochschule Wedel
Python & PyDev
Python                                OOP                                PyDev                                Fazit

Einsatzgebiete



Einsatzgebiete

         Viele bekannte Firmen und Institutionen setzen auf Python und fördern diese. Dazu gehören z.B.:
                 Google, YouTube




David Robakowski                                                                               Fachhochschule Wedel
Python & PyDev
Python                                OOP                                PyDev                                Fazit

Einsatzgebiete



Einsatzgebiete

         Viele bekannte Firmen und Institutionen setzen auf Python und fördern diese. Dazu gehören z.B.:
                 Google, YouTube
                 NASA




David Robakowski                                                                               Fachhochschule Wedel
Python & PyDev
Python                                OOP                                PyDev                                Fazit

Einsatzgebiete



Einsatzgebiete

         Viele bekannte Firmen und Institutionen setzen auf Python und fördern diese. Dazu gehören z.B.:
                 Google, YouTube
                 NASA
                 ...




David Robakowski                                                                               Fachhochschule Wedel
Python & PyDev
Python                                OOP                                PyDev                                Fazit

Einsatzgebiete



Einsatzgebiete

         Viele bekannte Firmen und Institutionen setzen auf Python und fördern diese. Dazu gehören z.B.:
                 Google, YouTube
                 NASA
                 ...




David Robakowski                                                                               Fachhochschule Wedel
Python & PyDev
Python                                OOP                                PyDev                                   Fazit

Einsatzgebiete



Einsatzgebiete

         Viele bekannte Firmen und Institutionen setzen auf Python und fördern diese. Dazu gehören z.B.:
                 Google, YouTube
                 NASA
                 ...
         Eingesetzt wird Python hauptsächlich in den Bereichen:
                           Prototyping Mit Python lassen sich sehr schnell Prototypen erstellen




David Robakowski                                                                                  Fachhochschule Wedel
Python & PyDev
Python                                OOP                                PyDev                                   Fazit

Einsatzgebiete



Einsatzgebiete

         Viele bekannte Firmen und Institutionen setzen auf Python und fördern diese. Dazu gehören z.B.:
                 Google, YouTube
                 NASA
                 ...
         Eingesetzt wird Python hauptsächlich in den Bereichen:
                           Prototyping Mit Python lassen sich sehr schnell Prototypen erstellen
         Embedded Skripting Interface Wird z.B. bei OpenOffice, Blender, Maya, PyMOL, SPSS und GIMP
                                      verwendet




David Robakowski                                                                                  Fachhochschule Wedel
Python & PyDev
Python                                OOP                                PyDev                                   Fazit

Einsatzgebiete



Einsatzgebiete

         Viele bekannte Firmen und Institutionen setzen auf Python und fördern diese. Dazu gehören z.B.:
                 Google, YouTube
                 NASA
                 ...
         Eingesetzt wird Python hauptsächlich in den Bereichen:
                           Prototyping Mit Python lassen sich sehr schnell Prototypen erstellen
         Embedded Skripting Interface Wird z.B. bei OpenOffice, Blender, Maya, PyMOL, SPSS und GIMP
                                      verwendet
                          Web-Umfeld Hier gibt es zahlreiche Web-Frameworks mit denen sich
                                     in kürzester Zeit gut skalierbare Websites erstellen lassen.
                                     Dazu zählen etwa Frameworks wie:




David Robakowski                                                                                  Fachhochschule Wedel
Python & PyDev
Python                                OOP                                PyDev                                   Fazit

Einsatzgebiete



Einsatzgebiete

         Viele bekannte Firmen und Institutionen setzen auf Python und fördern diese. Dazu gehören z.B.:
                 Google, YouTube
                 NASA
                 ...
         Eingesetzt wird Python hauptsächlich in den Bereichen:
                           Prototyping Mit Python lassen sich sehr schnell Prototypen erstellen
         Embedded Skripting Interface Wird z.B. bei OpenOffice, Blender, Maya, PyMOL, SPSS und GIMP
                                      verwendet
                          Web-Umfeld Hier gibt es zahlreiche Web-Frameworks mit denen sich
                                     in kürzester Zeit gut skalierbare Websites erstellen lassen.
                                     Dazu zählen etwa Frameworks wie:
                                                    Django Ähnlich wie das bekannte Ruby On Rails
                                                           Framework




David Robakowski                                                                                  Fachhochschule Wedel
Python & PyDev
Python                                OOP                                PyDev                                   Fazit

Einsatzgebiete



Einsatzgebiete

         Viele bekannte Firmen und Institutionen setzen auf Python und fördern diese. Dazu gehören z.B.:
                 Google, YouTube
                 NASA
                 ...
         Eingesetzt wird Python hauptsächlich in den Bereichen:
                           Prototyping Mit Python lassen sich sehr schnell Prototypen erstellen
         Embedded Skripting Interface Wird z.B. bei OpenOffice, Blender, Maya, PyMOL, SPSS und GIMP
                                      verwendet
                          Web-Umfeld Hier gibt es zahlreiche Web-Frameworks mit denen sich
                                     in kürzester Zeit gut skalierbare Websites erstellen lassen.
                                     Dazu zählen etwa Frameworks wie:
                                                   Django Ähnlich wie das bekannte Ruby On Rails
                                                          Framework
                                               TurboGears Vergleichbar mit Django, soll jedoch besser für
                                                          große Projekte geeignet sein




David Robakowski                                                                                  Fachhochschule Wedel
Python & PyDev
Python                                OOP                                PyDev                                   Fazit

Einsatzgebiete



Einsatzgebiete

         Viele bekannte Firmen und Institutionen setzen auf Python und fördern diese. Dazu gehören z.B.:
                 Google, YouTube
                 NASA
                 ...
         Eingesetzt wird Python hauptsächlich in den Bereichen:
                           Prototyping Mit Python lassen sich sehr schnell Prototypen erstellen
         Embedded Skripting Interface Wird z.B. bei OpenOffice, Blender, Maya, PyMOL, SPSS und GIMP
                                      verwendet
                          Web-Umfeld Hier gibt es zahlreiche Web-Frameworks mit denen sich
                                     in kürzester Zeit gut skalierbare Websites erstellen lassen.
                                     Dazu zählen etwa Frameworks wie:
                                                  Django Ähnlich wie das bekannte Ruby On Rails
                                                         Framework
                                              TurboGears Vergleichbar mit Django, soll jedoch besser für
                                                         große Projekte geeignet sein
                                       Google App Engine Bis zu einem gewissen Traffic sogar
                                                         kostenloses Hosting



David Robakowski                                                                                  Fachhochschule Wedel
Python & PyDev
Python                        OOP          PyDev                      Fazit

Vor- und Nachteile



Gliederung



         1 Python                   2 OOP
             Geschichte                 Objektsystem
             Eigenschaften              Klassen
             Sprachumfang               Vererbung
             Paradigmen                 Metaklassen
             Einsatzgebiete         3 PyDev
             Vor- und Nachteile         Zu PyDev
                                    4 Fazit
                                        Mein Fazit




David Robakowski                                       Fachhochschule Wedel
Python & PyDev
Python                            OOP             PyDev                  Fazit

Vor- und Nachteile



Vor- und Nachteile



                 Vorteile:                    Kritik:
                     Schnelles Testen durch
                     interaktive Konsole
                     möglich




David Robakowski                                          Fachhochschule Wedel
Python & PyDev
Python                            OOP             PyDev                           Fazit

Vor- und Nachteile



Vor- und Nachteile



                 Vorteile:                    Kritik:
                     Schnelles Testen durch        Fehleranfällig durch
                     interaktive Konsole           dynamische Typisierung;
                     möglich                       Fehler werden erst zur
                                                   Laufzeit erkannt




David Robakowski                                                   Fachhochschule Wedel
Python & PyDev
Python                            OOP               PyDev                           Fazit

Vor- und Nachteile



Vor- und Nachteile



                 Vorteile:                      Kritik:
                     Schnelles Testen durch          Fehleranfällig durch
                     interaktive Konsole             dynamische Typisierung;
                     möglich                         Fehler werden erst zur
                     Klare, gut überschaubare        Laufzeit erkannt
                     und lesbare Syntax




David Robakowski                                                     Fachhochschule Wedel
Python & PyDev
Python                            OOP               PyDev                          Fazit

Vor- und Nachteile



Vor- und Nachteile



                 Vorteile:                      Kritik:
                     Schnelles Testen durch          Fehleranfällig durch
                     interaktive Konsole             dynamische Typisierung;
                     möglich                         Fehler werden erst zur
                     Klare, gut überschaubare        Laufzeit erkannt
                     und lesbare Syntax              Es werden
                                                     Sprachelemente wie z.B.
                                                     switch oder do-while
                                                     vermisst




David Robakowski                                                    Fachhochschule Wedel
Python & PyDev
Python                            OOP               PyDev                          Fazit

Vor- und Nachteile



Vor- und Nachteile



                 Vorteile:                      Kritik:
                     Schnelles Testen durch          Fehleranfällig durch
                     interaktive Konsole             dynamische Typisierung;
                     möglich                         Fehler werden erst zur
                     Klare, gut überschaubare        Laufzeit erkannt
                     und lesbare Syntax              Es werden
                     Sehr große                      Sprachelemente wie z.B.
                     Standardbibliothek              switch oder do-while
                                                     vermisst




David Robakowski                                                    Fachhochschule Wedel
Python & PyDev
Python                        OOP          PyDev                      Fazit

Objektsystem



Gliederung



         1 Python                   2 OOP
             Geschichte                 Objektsystem
             Eigenschaften              Klassen
             Sprachumfang               Vererbung
             Paradigmen                 Metaklassen
             Einsatzgebiete         3 PyDev
             Vor- und Nachteile         Zu PyDev
                                    4 Fazit
                                        Mein Fazit




David Robakowski                                       Fachhochschule Wedel
Python & PyDev
Python                            OOP                 PyDev                           Fazit

Objektsystem



Objektsystem


     Old-Style Objekt-Modell                 New-Style Objekt-Modell

               Auch bekannt als „classic“
               oder „legacy“ Objekt-Modell




David Robakowski                                                       Fachhochschule Wedel
Python & PyDev
Python                            OOP                    PyDev                           Fazit

Objektsystem



Objektsystem


     Old-Style Objekt-Modell                    New-Style Objekt-Modell

               Auch bekannt als „classic“
               oder „legacy“ Objekt-Modell
               In allen Python 2.x Versionen
               aus Kompatibilitätsgründen als
               Default eingestellt




David Robakowski                                                          Fachhochschule Wedel
Python & PyDev
Python                            OOP                    PyDev                           Fazit

Objektsystem



Objektsystem


     Old-Style Objekt-Modell                    New-Style Objekt-Modell

               Auch bekannt als „classic“
               oder „legacy“ Objekt-Modell
               In allen Python 2.x Versionen
               aus Kompatibilitätsgründen als
               Default eingestellt
               Klassen-Objekt ist vom Typ
               <type ’class’>




David Robakowski                                                          Fachhochschule Wedel
Python & PyDev
Python                            OOP                    PyDev                           Fazit

Objektsystem



Objektsystem


     Old-Style Objekt-Modell                    New-Style Objekt-Modell

               Auch bekannt als „classic“           Einfacher, regulärer und
               oder „legacy“ Objekt-Modell          mächtiger
               In allen Python 2.x Versionen
               aus Kompatibilitätsgründen als
               Default eingestellt
               Klassen-Objekt ist vom Typ
               <type ’class’>




David Robakowski                                                          Fachhochschule Wedel
Python & PyDev
Python                            OOP                    PyDev                           Fazit

Objektsystem



Objektsystem


     Old-Style Objekt-Modell                    New-Style Objekt-Modell

               Auch bekannt als „classic“           Einfacher, regulärer und
               oder „legacy“ Objekt-Modell          mächtiger
               In allen Python 2.x Versionen        Klassen-Objekt ist von einem
               aus Kompatibilitätsgründen als       anderen Typ,
               Default eingestellt                  <type ’type’>
               Klassen-Objekt ist vom Typ
               <type ’class’>




David Robakowski                                                          Fachhochschule Wedel
Python & PyDev
Python                            OOP                    PyDev                            Fazit

Objektsystem



Objektsystem


     Old-Style Objekt-Modell                    New-Style Objekt-Modell

               Auch bekannt als „classic“           Einfacher, regulärer und
               oder „legacy“ Objekt-Modell          mächtiger
               In allen Python 2.x Versionen        Klassen-Objekt ist von einem
               aus Kompatibilitätsgründen als       anderen Typ,
               Default eingestellt                  <type ’type’>
               Klassen-Objekt ist vom Typ           In Zukunft, also ab Python 3.0,
               <type ’class’>                       werden nur noch New-Style
                                                    Klassen erlaubt sein




David Robakowski                                                           Fachhochschule Wedel
Python & PyDev
Python                            OOP                    PyDev                            Fazit

Objektsystem



Objektsystem


     Old-Style Objekt-Modell                    New-Style Objekt-Modell

               Auch bekannt als „classic“           Einfacher, regulärer und
               oder „legacy“ Objekt-Modell          mächtiger
               In allen Python 2.x Versionen        Klassen-Objekt ist von einem
               aus Kompatibilitätsgründen als       anderen Typ,
               Default eingestellt                  <type ’type’>
               Klassen-Objekt ist vom Typ           In Zukunft, also ab Python 3.0,
               <type ’class’>                       werden nur noch New-Style
                                                    Klassen erlaubt sein




David Robakowski                                                           Fachhochschule Wedel
Python & PyDev
Python                                           OOP            PyDev                            Fazit

Objektsystem



Objektsystem


     Old-Style Objekt-Modell                           New-Style Objekt-Modell

               Auch bekannt als „classic“                  Einfacher, regulärer und
               oder „legacy“ Objekt-Modell                 mächtiger
               In allen Python 2.x Versionen               Klassen-Objekt ist von einem
               aus Kompatibilitätsgründen als              anderen Typ,
               Default eingestellt                         <type ’type’>
               Klassen-Objekt ist vom Typ                  In Zukunft, also ab Python 3.0,
               <type ’class’>                              werden nur noch New-Style
                                                           Klassen erlaubt sein
           siehe Beispiel: „ex_object_models.py“ [4]




David Robakowski                                                                  Fachhochschule Wedel
Python & PyDev
Python                         OOP          PyDev                      Fazit

Klassen



Gliederung



          1 Python                   2 OOP
              Geschichte                 Objektsystem
              Eigenschaften              Klassen
              Sprachumfang               Vererbung
              Paradigmen                 Metaklassen
              Einsatzgebiete         3 PyDev
              Vor- und Nachteile         Zu PyDev
                                     4 Fazit
                                         Mein Fazit




David Robakowski                                        Fachhochschule Wedel
Python & PyDev
Python                           OOP                      PyDev                          Fazit

Klassen



Klassen
          Klassen haben in Python unterschiedliche Eigenschaften:
                 Klassen ohne Basis stellen eine „old-style Klasse“ dar




David Robakowski                                                          Fachhochschule Wedel
Python & PyDev
Python                           OOP                      PyDev                          Fazit

Klassen



Klassen
          Klassen haben in Python unterschiedliche Eigenschaften:
                 Klassen ohne Basis stellen eine „old-style Klasse“ dar
                 Klassen lassen sich wie Funktionen aufrufen, gehören also zu
                 den callable Typen




David Robakowski                                                          Fachhochschule Wedel
Python & PyDev
Python                           OOP                      PyDev                          Fazit

Klassen



Klassen
          Klassen haben in Python unterschiedliche Eigenschaften:
                 Klassen ohne Basis stellen eine „old-style Klasse“ dar
                 Klassen lassen sich wie Funktionen aufrufen, gehören also zu
                 den callable Typen
                 Instanzierung erfolgt durch den Aufruf des Klassennamens




David Robakowski                                                          Fachhochschule Wedel
Python & PyDev
Python                           OOP                      PyDev                          Fazit

Klassen



Klassen
          Klassen haben in Python unterschiedliche Eigenschaften:
                 Klassen ohne Basis stellen eine „old-style Klasse“ dar
                 Klassen lassen sich wie Funktionen aufrufen, gehören also zu
                 den callable Typen
                 Instanzierung erfolgt durch den Aufruf des Klassennamens
                 Klassen besitzen Attribute welche „gebunden“ und referenziert
                 werden können




David Robakowski                                                          Fachhochschule Wedel
Python & PyDev
Python                           OOP                      PyDev                          Fazit

Klassen



Klassen
          Klassen haben in Python unterschiedliche Eigenschaften:
                 Klassen ohne Basis stellen eine „old-style Klasse“ dar
                 Klassen lassen sich wie Funktionen aufrufen, gehören also zu
                 den callable Typen
                 Instanzierung erfolgt durch den Aufruf des Klassennamens
                 Klassen besitzen Attribute welche „gebunden“ und referenziert
                 werden können
                 Werte von Klassenattribute können einfache Datenobjekte,
                 komplexere wie etwa Deskriptoren oder etwa spezielle Methoden
                 sein




David Robakowski                                                          Fachhochschule Wedel
Python & PyDev
Python                           OOP                      PyDev                          Fazit

Klassen



Klassen
          Klassen haben in Python unterschiedliche Eigenschaften:
                 Klassen ohne Basis stellen eine „old-style Klasse“ dar
                 Klassen lassen sich wie Funktionen aufrufen, gehören also zu
                 den callable Typen
                 Instanzierung erfolgt durch den Aufruf des Klassennamens
                 Klassen besitzen Attribute welche „gebunden“ und referenziert
                 werden können
                 Werte von Klassenattribute können einfache Datenobjekte,
                 komplexere wie etwa Deskriptoren oder etwa spezielle Methoden
                 sein
                 Das Verschachteln von Klassen ist möglich




David Robakowski                                                          Fachhochschule Wedel
Python & PyDev
Python                           OOP                      PyDev                          Fazit

Klassen



Klassen
          Klassen haben in Python unterschiedliche Eigenschaften:
                 Klassen ohne Basis stellen eine „old-style Klasse“ dar
                 Klassen lassen sich wie Funktionen aufrufen, gehören also zu
                 den callable Typen
                 Instanzierung erfolgt durch den Aufruf des Klassennamens
                 Klassen besitzen Attribute welche „gebunden“ und referenziert
                 werden können
                 Werte von Klassenattribute können einfache Datenobjekte,
                 komplexere wie etwa Deskriptoren oder etwa spezielle Methoden
                 sein
                 Das Verschachteln von Klassen ist möglich
                 Vererbung und Mehrfachvererbung werden unterstützt


David Robakowski                                                          Fachhochschule Wedel
Python & PyDev
Python                           OOP                      PyDev                    Fazit

Klassen



Klassen II
          Klassen haben in Python unterschiedliche Eigenschaften:
                 Zugriff auf Instanzen durch die Punktnotation




David Robakowski                                                    Fachhochschule Wedel
Python & PyDev
Python                           OOP                      PyDev                    Fazit

Klassen



Klassen II
          Klassen haben in Python unterschiedliche Eigenschaften:
                 Zugriff auf Instanzen durch die Punktnotation
                 Es gibt static-, sowie class-Methoden




David Robakowski                                                    Fachhochschule Wedel
Python & PyDev
Python                           OOP                      PyDev                    Fazit

Klassen



Klassen II
          Klassen haben in Python unterschiedliche Eigenschaften:
                 Zugriff auf Instanzen durch die Punktnotation
                 Es gibt static-, sowie class-Methoden
                 gebundene und ungebundene Methoden




David Robakowski                                                    Fachhochschule Wedel
Python & PyDev
Python                           OOP                      PyDev                         Fazit

Klassen



Klassen II
          Klassen haben in Python unterschiedliche Eigenschaften:
                 Zugriff auf Instanzen durch die Punktnotation
                 Es gibt static-, sowie class-Methoden
                 gebundene und ungebundene Methoden
                 Es lässt sich von anderen built-in Typen wie z.B. int oder dict
                 erben




David Robakowski                                                         Fachhochschule Wedel
Python & PyDev
Python                           OOP                      PyDev                         Fazit

Klassen



Klassen II
          Klassen haben in Python unterschiedliche Eigenschaften:
                 Zugriff auf Instanzen durch die Punktnotation
                 Es gibt static-, sowie class-Methoden
                 gebundene und ungebundene Methoden
                 Es lässt sich von anderen built-in Typen wie z.B. int oder dict
                 erben
                 Die Subklassenbeziehung ist transitiv




David Robakowski                                                         Fachhochschule Wedel
Python & PyDev
Python                           OOP                      PyDev                         Fazit

Klassen



Klassen II
          Klassen haben in Python unterschiedliche Eigenschaften:
                 Zugriff auf Instanzen durch die Punktnotation
                 Es gibt static-, sowie class-Methoden
                 gebundene und ungebundene Methoden
                 Es lässt sich von anderen built-in Typen wie z.B. int oder dict
                 erben
                 Die Subklassenbeziehung ist transitiv
                     if C2(C1) && C3(C2) => issubclass(C3, C1) == True




David Robakowski                                                         Fachhochschule Wedel
Python & PyDev
Python                           OOP                      PyDev                         Fazit

Klassen



Klassen II
          Klassen haben in Python unterschiedliche Eigenschaften:
                 Zugriff auf Instanzen durch die Punktnotation
                 Es gibt static-, sowie class-Methoden
                 gebundene und ungebundene Methoden
                 Es lässt sich von anderen built-in Typen wie z.B. int oder dict
                 erben
                 Die Subklassenbeziehung ist transitiv
                     if C2(C1) && C3(C2) => issubclass(C3, C1) == True




David Robakowski                                                         Fachhochschule Wedel
Python & PyDev
Python                                             OOP           PyDev                  Fazit

Klassen



Klassen II
          Klassen haben in Python unterschiedliche Eigenschaften:
                 Zugriff auf Instanzen durch die Punktnotation
                 Es gibt static-, sowie class-Methoden
                 gebundene und ungebundene Methoden
                 Es lässt sich von anderen built-in Typen wie z.B. int oder dict
                 erben
                 Die Subklassenbeziehung ist transitiv
                         if C2(C1) && C3(C2) => issubclass(C3, C1) == True
           siehe Beispiel: „ex_inherit_built_in_types_.py“ [4]




David Robakowski                                                         Fachhochschule Wedel
Python & PyDev
Python                           OOP                     PyDev                          Fazit

Klassen



Attribute
                 Alle Attribute werden in einem Dictionary __dict__ verwaltet




David Robakowski                                                         Fachhochschule Wedel
Python & PyDev
Python                           OOP                     PyDev                          Fazit

Klassen



Attribute
                 Alle Attribute werden in einem Dictionary __dict__ verwaltet
                 Methoden werden auch als Attribute gehandhabt




David Robakowski                                                         Fachhochschule Wedel
Python & PyDev
Python                           OOP                     PyDev                          Fazit

Klassen



Attribute
                 Alle Attribute werden in einem Dictionary __dict__ verwaltet
                 Methoden werden auch als Attribute gehandhabt




David Robakowski                                                         Fachhochschule Wedel
Python & PyDev
Python                           OOP                     PyDev                          Fazit

Klassen



Attribute
                 Alle Attribute werden in einem Dictionary __dict__ verwaltet
                 Methoden werden auch als Attribute gehandhabt
                       Bound an eine Instanz gebunden




David Robakowski                                                         Fachhochschule Wedel
Python & PyDev
Python                           OOP                     PyDev                          Fazit

Klassen



Attribute
                 Alle Attribute werden in einem Dictionary __dict__ verwaltet
                 Methoden werden auch als Attribute gehandhabt
                       Bound an eine Instanz gebunden




David Robakowski                                                         Fachhochschule Wedel
Python & PyDev
Python                           OOP                     PyDev                          Fazit

Klassen



Attribute
                 Alle Attribute werden in einem Dictionary __dict__ verwaltet
                 Methoden werden auch als Attribute gehandhabt
                       Bound an eine Instanz gebunden
                     Unbound an eine Klasse gebunden




David Robakowski                                                         Fachhochschule Wedel
Python & PyDev
Python                           OOP                     PyDev                          Fazit

Klassen



Attribute
                 Alle Attribute werden in einem Dictionary __dict__ verwaltet
                 Methoden werden auch als Attribute gehandhabt
                       Bound an eine Instanz gebunden
                     Unbound an eine Klasse gebunden
                 Es lassen sich dynamisch Attribute hinzufügen, sowie löschen




David Robakowski                                                         Fachhochschule Wedel
Python & PyDev
Python                           OOP                       PyDev                        Fazit

Klassen



Attribute
                 Alle Attribute werden in einem Dictionary __dict__ verwaltet
                 Methoden werden auch als Attribute gehandhabt
                       Bound an eine Instanz gebunden
                     Unbound an eine Klasse gebunden
                 Es lassen sich dynamisch Attribute hinzufügen, sowie löschen
                 Es gibt Klassen-/ und Instanz-Attribute




David Robakowski                                                         Fachhochschule Wedel
Python & PyDev
Python                            OOP                      PyDev                         Fazit

Klassen



Attribute
                 Alle Attribute werden in einem Dictionary __dict__ verwaltet
                 Methoden werden auch als Attribute gehandhabt
                       Bound an eine Instanz gebunden
                     Unbound an eine Klasse gebunden
                 Es lassen sich dynamisch Attribute hinzufügen, sowie löschen
                 Es gibt Klassen-/ und Instanz-Attribute
                 Es sind bereits implizit folgende Attribute vorhanden:




David Robakowski                                                          Fachhochschule Wedel
Python & PyDev
Python                            OOP                      PyDev                         Fazit

Klassen



Attribute
                 Alle Attribute werden in einem Dictionary __dict__ verwaltet
                 Methoden werden auch als Attribute gehandhabt
                       Bound an eine Instanz gebunden
                     Unbound an eine Klasse gebunden
                 Es lassen sich dynamisch Attribute hinzufügen, sowie löschen
                 Es gibt Klassen-/ und Instanz-Attribute
                 Es sind bereits implizit folgende Attribute vorhanden:




David Robakowski                                                          Fachhochschule Wedel
Python & PyDev
Python                            OOP                      PyDev                         Fazit

Klassen



Attribute
                 Alle Attribute werden in einem Dictionary __dict__ verwaltet
                 Methoden werden auch als Attribute gehandhabt
                       Bound an eine Instanz gebunden
                     Unbound an eine Klasse gebunden
                 Es lassen sich dynamisch Attribute hinzufügen, sowie löschen
                 Es gibt Klassen-/ und Instanz-Attribute
                 Es sind bereits implizit folgende Attribute vorhanden:
                      __class__ Klassenobjekt zu dem die Instanz gehört




David Robakowski                                                          Fachhochschule Wedel
Python & PyDev
Python                            OOP                      PyDev                         Fazit

Klassen



Attribute
                 Alle Attribute werden in einem Dictionary __dict__ verwaltet
                 Methoden werden auch als Attribute gehandhabt
                       Bound an eine Instanz gebunden
                     Unbound an eine Klasse gebunden
                 Es lassen sich dynamisch Attribute hinzufügen, sowie löschen
                 Es gibt Klassen-/ und Instanz-Attribute
                 Es sind bereits implizit folgende Attribute vorhanden:
                      __class__ Klassenobjekt zu dem die Instanz gehört




David Robakowski                                                          Fachhochschule Wedel
Python & PyDev
Python                            OOP                      PyDev                         Fazit

Klassen



Attribute
                 Alle Attribute werden in einem Dictionary __dict__ verwaltet
                 Methoden werden auch als Attribute gehandhabt
                       Bound an eine Instanz gebunden
                     Unbound an eine Klasse gebunden
                 Es lassen sich dynamisch Attribute hinzufügen, sowie löschen
                 Es gibt Klassen-/ und Instanz-Attribute
                 Es sind bereits implizit folgende Attribute vorhanden:
                      __class__ Klassenobjekt zu dem die Instanz gehört
                       __dict__ Dictionary für die Attribute




David Robakowski                                                          Fachhochschule Wedel
Python & PyDev
Python                            OOP                      PyDev                         Fazit

Klassen



Attribute
                 Alle Attribute werden in einem Dictionary __dict__ verwaltet
                 Methoden werden auch als Attribute gehandhabt
                       Bound an eine Instanz gebunden
                     Unbound an eine Klasse gebunden
                 Es lassen sich dynamisch Attribute hinzufügen, sowie löschen
                 Es gibt Klassen-/ und Instanz-Attribute
                 Es sind bereits implizit folgende Attribute vorhanden:
                      __class__ Klassenobjekt zu dem die Instanz gehört
                       __dict__ Dictionary für die Attribute




David Robakowski                                                          Fachhochschule Wedel
Python & PyDev
Python                            OOP                      PyDev                         Fazit

Klassen



Attribute
                 Alle Attribute werden in einem Dictionary __dict__ verwaltet
                 Methoden werden auch als Attribute gehandhabt
                       Bound an eine Instanz gebunden
                     Unbound an eine Klasse gebunden
                 Es lassen sich dynamisch Attribute hinzufügen, sowie löschen
                 Es gibt Klassen-/ und Instanz-Attribute
                 Es sind bereits implizit folgende Attribute vorhanden:
                     __class__ Klassenobjekt zu dem die Instanz gehört
                       __dict__ Dictionary für die Attribute
                     __name__ Name der Klasse




David Robakowski                                                          Fachhochschule Wedel
Python & PyDev
Python                            OOP                      PyDev                         Fazit

Klassen



Attribute
                 Alle Attribute werden in einem Dictionary __dict__ verwaltet
                 Methoden werden auch als Attribute gehandhabt
                       Bound an eine Instanz gebunden
                     Unbound an eine Klasse gebunden
                 Es lassen sich dynamisch Attribute hinzufügen, sowie löschen
                 Es gibt Klassen-/ und Instanz-Attribute
                 Es sind bereits implizit folgende Attribute vorhanden:
                     __class__ Klassenobjekt zu dem die Instanz gehört
                       __dict__ Dictionary für die Attribute
                     __name__ Name der Klasse




David Robakowski                                                          Fachhochschule Wedel
Python & PyDev
Python                             OOP                       PyDev                         Fazit

Klassen



Attribute
                 Alle Attribute werden in einem Dictionary __dict__ verwaltet
                 Methoden werden auch als Attribute gehandhabt
                       Bound an eine Instanz gebunden
                     Unbound an eine Klasse gebunden
                 Es lassen sich dynamisch Attribute hinzufügen, sowie löschen
                 Es gibt Klassen-/ und Instanz-Attribute
                 Es sind bereits implizit folgende Attribute vorhanden:
                      __class__   Klassenobjekt zu dem die Instanz gehört
                       __dict__   Dictionary für die Attribute
                     __name__     Name der Klasse
                     __bases__    Liste aller Basisklassen




David Robakowski                                                            Fachhochschule Wedel
Python & PyDev
Python                             OOP                       PyDev                         Fazit

Klassen



Attribute
                 Alle Attribute werden in einem Dictionary __dict__ verwaltet
                 Methoden werden auch als Attribute gehandhabt
                       Bound an eine Instanz gebunden
                     Unbound an eine Klasse gebunden
                 Es lassen sich dynamisch Attribute hinzufügen, sowie löschen
                 Es gibt Klassen-/ und Instanz-Attribute
                 Es sind bereits implizit folgende Attribute vorhanden:
                      __class__   Klassenobjekt zu dem die Instanz gehört
                       __dict__   Dictionary für die Attribute
                     __name__     Name der Klasse
                     __bases__    Liste aller Basisklassen




David Robakowski                                                            Fachhochschule Wedel
Python & PyDev
Python                             OOP                       PyDev                         Fazit

Klassen



Attribute
                 Alle Attribute werden in einem Dictionary __dict__ verwaltet
                 Methoden werden auch als Attribute gehandhabt
                       Bound an eine Instanz gebunden
                     Unbound an eine Klasse gebunden
                 Es lassen sich dynamisch Attribute hinzufügen, sowie löschen
                 Es gibt Klassen-/ und Instanz-Attribute
                 Es sind bereits implizit folgende Attribute vorhanden:
                      __class__   Klassenobjekt zu dem die Instanz gehört
                       __dict__   Dictionary für die Attribute
                     __name__     Name der Klasse
                     __bases__    Liste aller Basisklassen
                       __doc__    Beinhaltet den „Doc-String“




David Robakowski                                                            Fachhochschule Wedel
Python & PyDev
Python                             OOP                       PyDev                         Fazit

Klassen



Attribute
                 Alle Attribute werden in einem Dictionary __dict__ verwaltet
                 Methoden werden auch als Attribute gehandhabt
                       Bound an eine Instanz gebunden
                     Unbound an eine Klasse gebunden
                 Es lassen sich dynamisch Attribute hinzufügen, sowie löschen
                 Es gibt Klassen-/ und Instanz-Attribute
                 Es sind bereits implizit folgende Attribute vorhanden:
                      __class__   Klassenobjekt zu dem die Instanz gehört
                       __dict__   Dictionary für die Attribute
                     __name__     Name der Klasse
                     __bases__    Liste aller Basisklassen
                       __doc__    Beinhaltet den „Doc-String“




David Robakowski                                                            Fachhochschule Wedel
Python & PyDev
Python                                               OOP                       PyDev                         Fazit

Klassen



Attribute
                 Alle Attribute werden in einem Dictionary __dict__ verwaltet
                 Methoden werden auch als Attribute gehandhabt
                           Bound an eine Instanz gebunden
                         Unbound an eine Klasse gebunden
                 Es lassen sich dynamisch Attribute hinzufügen, sowie löschen
                 Es gibt Klassen-/ und Instanz-Attribute
                 Es sind bereits implizit folgende Attribute vorhanden:
                          __class__                 Klassenobjekt zu dem die Instanz gehört
                           __dict__                 Dictionary für die Attribute
                         __name__                   Name der Klasse
                         __bases__                  Liste aller Basisklassen
                           __doc__                  Beinhaltet den „Doc-String“
           siehe Beispiel: „ex_attributes.py“ [4]




David Robakowski                                                                              Fachhochschule Wedel
Python & PyDev
Python                           OOP                     PyDev                          Fazit

Klassen



Kapselung von Attributen
                 Python ermöglicht keine „richtige“ Datenkapselung, es handelt
                 sich eher um Konventionen




David Robakowski                                                         Fachhochschule Wedel
Python & PyDev
Python                           OOP                     PyDev                          Fazit

Klassen



Kapselung von Attributen
                 Python ermöglicht keine „richtige“ Datenkapselung, es handelt
                 sich eher um Konventionen
                 Folgende Konventionen sollten eingehalten werden:




David Robakowski                                                         Fachhochschule Wedel
Python & PyDev
Python                           OOP                     PyDev                          Fazit

Klassen



Kapselung von Attributen
                 Python ermöglicht keine „richtige“ Datenkapselung, es handelt
                 sich eher um Konventionen
                 Folgende Konventionen sollten eingehalten werden:




David Robakowski                                                         Fachhochschule Wedel
Python & PyDev
Python                           OOP                          PyDev                     Fazit

Klassen



Kapselung von Attributen
                 Python ermöglicht keine „richtige“ Datenkapselung, es handelt
                 sich eher um Konventionen
                 Folgende Konventionen sollten eingehalten werden:
                              public: Per Default alle Attribute




David Robakowski                                                         Fachhochschule Wedel
Python & PyDev
Python                           OOP                          PyDev                     Fazit

Klassen



Kapselung von Attributen
                 Python ermöglicht keine „richtige“ Datenkapselung, es handelt
                 sich eher um Konventionen
                 Folgende Konventionen sollten eingehalten werden:
                              public: Per Default alle Attribute




David Robakowski                                                         Fachhochschule Wedel
Python & PyDev
Python                            OOP                        PyDev                            Fazit

Klassen



Kapselung von Attributen
                 Python ermöglicht keine „richtige“ Datenkapselung, es handelt
                 sich eher um Konventionen
                 Folgende Konventionen sollten eingehalten werden:
                                public: Per Default alle Attribute
                     protected / weak: Einfaches „_“ Zeichen leitet protected ein, also
                                        z.B. _name
                                        Werden nicht in den Namensraum eingebunden,
                                        sind jedoch über den Namen erreichbar




David Robakowski                                                               Fachhochschule Wedel
Python & PyDev
Python                            OOP                        PyDev                            Fazit

Klassen



Kapselung von Attributen
                 Python ermöglicht keine „richtige“ Datenkapselung, es handelt
                 sich eher um Konventionen
                 Folgende Konventionen sollten eingehalten werden:
                                public: Per Default alle Attribute
                     protected / weak: Einfaches „_“ Zeichen leitet protected ein, also
                                        z.B. _name
                                        Werden nicht in den Namensraum eingebunden,
                                        sind jedoch über den Namen erreichbar




David Robakowski                                                               Fachhochschule Wedel
Python & PyDev
Python                             OOP                         PyDev                             Fazit

Klassen



Kapselung von Attributen
                 Python ermöglicht keine „richtige“ Datenkapselung, es handelt
                 sich eher um Konventionen
                 Folgende Konventionen sollten eingehalten werden:
                                 public: Per Default alle Attribute
                     protected / weak: Einfaches „_“ Zeichen leitet protected ein, also
                                         z.B. _name
                                         Werden nicht in den Namensraum eingebunden,
                                         sind jedoch über den Namen erreichbar
                       private / strong: Doppelte „_“ Zeichen leiten private ein, also z.B.
                                         __name
                                         Werden vom Interpreter in _ClassName__name
                                         umbenannt




David Robakowski                                                                  Fachhochschule Wedel
Python & PyDev
Python                             OOP                         PyDev                             Fazit

Klassen



Kapselung von Attributen
                 Python ermöglicht keine „richtige“ Datenkapselung, es handelt
                 sich eher um Konventionen
                 Folgende Konventionen sollten eingehalten werden:
                                 public: Per Default alle Attribute
                     protected / weak: Einfaches „_“ Zeichen leitet protected ein, also
                                         z.B. _name
                                         Werden nicht in den Namensraum eingebunden,
                                         sind jedoch über den Namen erreichbar
                       private / strong: Doppelte „_“ Zeichen leiten private ein, also z.B.
                                         __name
                                         Werden vom Interpreter in _ClassName__name
                                         umbenannt




David Robakowski                                                                  Fachhochschule Wedel
Python & PyDev
Python                                            OOP              PyDev                             Fazit

Klassen



Kapselung von Attributen
                 Python ermöglicht keine „richtige“ Datenkapselung, es handelt
                 sich eher um Konventionen
                 Folgende Konventionen sollten eingehalten werden:
                                     public: Per Default alle Attribute
                         protected / weak: Einfaches „_“ Zeichen leitet protected ein, also
                                             z.B. _name
                                             Werden nicht in den Namensraum eingebunden,
                                             sind jedoch über den Namen erreichbar
                           private / strong: Doppelte „_“ Zeichen leiten private ein, also z.B.
                                             __name
                                             Werden vom Interpreter in _ClassName__name
                                             umbenannt
           siehe Beispiel: „ex_encapsulation.py“ [4]




David Robakowski                                                                      Fachhochschule Wedel
Python & PyDev
Python                          OOP                     PyDev                         Fazit

Klassen



Deskriptoren
                 Spezielle new-style Objekte, dessen Klasse eine Methode
                 __get__ implementiert




David Robakowski                                                       Fachhochschule Wedel
Python & PyDev
Python                           OOP                     PyDev                          Fazit

Klassen



Deskriptoren
                 Spezielle new-style Objekte, dessen Klasse eine Methode
                 __get__ implementiert
                 Übernehmen als Klassenattribut die Zugriffsteuerung auf diese
                 Instanz




David Robakowski                                                         Fachhochschule Wedel
Python & PyDev
Python                           OOP                     PyDev                          Fazit

Klassen



Deskriptoren
                 Spezielle new-style Objekte, dessen Klasse eine Methode
                 __get__ implementiert
                 Übernehmen als Klassenattribut die Zugriffsteuerung auf diese
                 Instanz
                 Unterteilt in:




David Robakowski                                                         Fachhochschule Wedel
Python & PyDev
Python                           OOP                     PyDev                          Fazit

Klassen



Deskriptoren
                 Spezielle new-style Objekte, dessen Klasse eine Methode
                 __get__ implementiert
                 Übernehmen als Klassenattribut die Zugriffsteuerung auf diese
                 Instanz
                 Unterteilt in:




David Robakowski                                                         Fachhochschule Wedel
Python & PyDev
Python                           OOP                        PyDev                            Fazit

Klassen



Deskriptoren
                 Spezielle new-style Objekte, dessen Klasse eine Methode
                 __get__ implementiert
                 Übernehmen als Klassenattribut die Zugriffsteuerung auf diese
                 Instanz
                 Unterteilt in:
                         overriding descriptor implementieren zusätzlich die __set__
                                               Methode
                                               Auch Daten-Deskriptor genannt




David Robakowski                                                              Fachhochschule Wedel
Python & PyDev
Python                           OOP                        PyDev                            Fazit

Klassen



Deskriptoren
                 Spezielle new-style Objekte, dessen Klasse eine Methode
                 __get__ implementiert
                 Übernehmen als Klassenattribut die Zugriffsteuerung auf diese
                 Instanz
                 Unterteilt in:
                         overriding descriptor implementieren zusätzlich die __set__
                                               Methode
                                               Auch Daten-Deskriptor genannt




David Robakowski                                                              Fachhochschule Wedel
Python & PyDev
Python                            OOP                        PyDev                           Fazit

Klassen



Deskriptoren
                 Spezielle new-style Objekte, dessen Klasse eine Methode
                 __get__ implementiert
                 Übernehmen als Klassenattribut die Zugriffsteuerung auf diese
                 Instanz
                 Unterteilt in:
                         overriding descriptor implementieren zusätzlich die __set__
                                               Methode
                                               Auch Daten-Deskriptor genannt
                     non-overriding descriptor z.B. Funktionsobjekte




David Robakowski                                                              Fachhochschule Wedel
Python & PyDev
Python                            OOP                        PyDev                           Fazit

Klassen



Deskriptoren
                 Spezielle new-style Objekte, dessen Klasse eine Methode
                 __get__ implementiert
                 Übernehmen als Klassenattribut die Zugriffsteuerung auf diese
                 Instanz
                 Unterteilt in:
                         overriding descriptor implementieren zusätzlich die __set__
                                               Methode
                                               Auch Daten-Deskriptor genannt
                     non-overriding descriptor z.B. Funktionsobjekte
                 Finden Anwendung bei Funktionen, Eigenschaften, super(),
                 Statische-, Klassenmethoden und sogar bei Klassen




David Robakowski                                                              Fachhochschule Wedel
Python & PyDev
Python                            OOP                        PyDev                           Fazit

Klassen



Deskriptoren
                 Spezielle new-style Objekte, dessen Klasse eine Methode
                 __get__ implementiert
                 Übernehmen als Klassenattribut die Zugriffsteuerung auf diese
                 Instanz
                 Unterteilt in:
                         overriding descriptor implementieren zusätzlich die __set__
                                               Methode
                                               Auch Daten-Deskriptor genannt
                     non-overriding descriptor z.B. Funktionsobjekte
                 Finden Anwendung bei Funktionen, Eigenschaften, super(),
                 Statische-, Klassenmethoden und sogar bei Klassen




David Robakowski                                                              Fachhochschule Wedel
Python & PyDev
Python                                               OOP         PyDev                           Fazit

Klassen



Deskriptoren
                 Spezielle new-style Objekte, dessen Klasse eine Methode
                 __get__ implementiert
                 Übernehmen als Klassenattribut die Zugriffsteuerung auf diese
                 Instanz
                 Unterteilt in:
                             overriding descriptor implementieren zusätzlich die __set__
                                                   Methode
                                                   Auch Daten-Deskriptor genannt
                         non-overriding descriptor z.B. Funktionsobjekte
                 Finden Anwendung bei Funktionen, Eigenschaften, super(),
                 Statische-, Klassenmethoden und sogar bei Klassen
           siehe Beispiel: „ex_descriptors.py“ [4]




David Robakowski                                                                  Fachhochschule Wedel
Python & PyDev
Python                           OOP                     PyDev                  Fazit

Klassen



Funktionen und Methoden
                 Das erste Argument enthält die Objektinstanz




David Robakowski                                                 Fachhochschule Wedel
Python & PyDev
Python                           OOP                     PyDev                  Fazit

Klassen



Funktionen und Methoden
                 Das erste Argument enthält die Objektinstanz
                 Per Konvention self genannt




David Robakowski                                                 Fachhochschule Wedel
Python & PyDev
Python                           OOP                     PyDev                         Fazit

Klassen



Funktionen und Methoden
                 Das erste Argument enthält die Objektinstanz
                 Per Konvention self genannt
                 Eine Klasse kann spezielle Methoden enthalten, welche die
                 Form __xxx__ haben




David Robakowski                                                        Fachhochschule Wedel
Python & PyDev
Python                           OOP                     PyDev                         Fazit

Klassen



Funktionen und Methoden
                 Das erste Argument enthält die Objektinstanz
                 Per Konvention self genannt
                 Eine Klasse kann spezielle Methoden enthalten, welche die
                 Form __xxx__ haben
                 Um den Aufruf als Methode zu unterstützen, enthalten
                 Funktionen die __get__ Methode




David Robakowski                                                        Fachhochschule Wedel
Python & PyDev
Python                           OOP                       PyDev                          Fazit

Klassen



Funktionen und Methoden
                 Das erste Argument enthält die Objektinstanz
                 Per Konvention self genannt
                 Eine Klasse kann spezielle Methoden enthalten, welche die
                 Form __xxx__ haben
                 Um den Aufruf als Methode zu unterstützen, enthalten
                 Funktionen die __get__ Methode
                 Alle Funktionen stellen non-overriding Deskriptoren dar, die
                 gebundene oder ungebundene Methoden zurückgeben




David Robakowski                                                           Fachhochschule Wedel
Python & PyDev
Python                           OOP                       PyDev                          Fazit

Klassen



Funktionen und Methoden
                 Das erste Argument enthält die Objektinstanz
                 Per Konvention self genannt
                 Eine Klasse kann spezielle Methoden enthalten, welche die
                 Form __xxx__ haben
                 Um den Aufruf als Methode zu unterstützen, enthalten
                 Funktionen die __get__ Methode
                 Alle Funktionen stellen non-overriding Deskriptoren dar, die
                 gebundene oder ungebundene Methoden zurückgeben




David Robakowski                                                           Fachhochschule Wedel
Python & PyDev
Python                                               OOP   PyDev                          Fazit

Klassen



Funktionen und Methoden
                 Das erste Argument enthält die Objektinstanz
                 Per Konvention self genannt
                 Eine Klasse kann spezielle Methoden enthalten, welche die
                 Form __xxx__ haben
                 Um den Aufruf als Methode zu unterstützen, enthalten
                 Funktionen die __get__ Methode
                 Alle Funktionen stellen non-overriding Deskriptoren dar, die
                 gebundene oder ungebundene Methoden zurückgeben
           siehe Beispiel: „ex_descriptors.py“ [4]




David Robakowski                                                           Fachhochschule Wedel
Python & PyDev
Python                           OOP                   PyDev                  Fazit

Klassen



Properties, Statische und Klassenmethoden
                 Werden über Deskriptoren realisiert




David Robakowski                                               Fachhochschule Wedel
Python & PyDev
Python                           OOP                   PyDev                  Fazit

Klassen



Properties, Statische und Klassenmethoden
                 Werden über Deskriptoren realisiert
                 Werden an Klassenattribute gebunden




David Robakowski                                               Fachhochschule Wedel
Python & PyDev
Python                           OOP                   PyDev                  Fazit

Klassen



Properties, Statische und Klassenmethoden
                 Werden über Deskriptoren realisiert
                 Werden an Klassenattribute gebunden




David Robakowski                                               Fachhochschule Wedel
Python & PyDev
Python                           OOP                           PyDev                  Fazit

Klassen



Properties, Statische und Klassenmethoden
                 Werden über Deskriptoren realisiert
                 Werden an Klassenattribute gebunden
                     property Data-Deskriptor
                              property(fget=None, fset=None, fdel=None, doc=None)
                              Read-only einfach möglich durch Nichtsetzen von
                              fset
                              Vorteile, keine Statements wie
                              c.setCnt(c.getCnt( ) + 1)




David Robakowski                                                       Fachhochschule Wedel
Python & PyDev
Python                           OOP                           PyDev                  Fazit

Klassen



Properties, Statische und Klassenmethoden
                 Werden über Deskriptoren realisiert
                 Werden an Klassenattribute gebunden
                     property Data-Deskriptor
                              property(fget=None, fset=None, fdel=None, doc=None)
                              Read-only einfach möglich durch Nichtsetzen von
                              fset
                              Vorteile, keine Statements wie
                              c.setCnt(c.getCnt( ) + 1)




David Robakowski                                                       Fachhochschule Wedel
Python & PyDev
Python                           OOP                           PyDev                  Fazit

Klassen



Properties, Statische und Klassenmethoden
                 Werden über Deskriptoren realisiert
                 Werden an Klassenattribute gebunden
                     property Data-Deskriptor
                              property(fget=None, fset=None, fdel=None, doc=None)
                              Read-only einfach möglich durch Nichtsetzen von
                              fset
                              Vorteile, keine Statements wie
                              c.setCnt(c.getCnt( ) + 1)
                 staticmethod non-overriding Deskriptor
                              In Java vergleichbar mit static
                              Gibt zu Grunde liegende Funktion ohne Änderung
                              zurück
                              staticmethod(f)



David Robakowski                                                       Fachhochschule Wedel
Python & PyDev
Python             OOP           PyDev                        Fazit

Klassen



Properties, Statische und Klassenmethoden II




David Robakowski                               Fachhochschule Wedel
Python & PyDev
Python                          OOP                    PyDev                            Fazit

Klassen



Properties, Statische und Klassenmethoden II
                 classmethod non-overriding Deskriptor
                             Erstes Argument wird an das Klassenobjekt
                             gebunden
                             Per Konvention cls genannt
                             Kann durch Instanz- oder Klassenobjekt
                             aufgerufen werden
                             classmethod(f)




David Robakowski                                                         Fachhochschule Wedel
Python & PyDev
Python                          OOP                    PyDev                            Fazit

Klassen



Properties, Statische und Klassenmethoden II
                 classmethod non-overriding Deskriptor
                             Erstes Argument wird an das Klassenobjekt
                             gebunden
                             Per Konvention cls genannt
                             Kann durch Instanz- oder Klassenobjekt
                             aufgerufen werden
                             classmethod(f)




David Robakowski                                                         Fachhochschule Wedel
Python & PyDev
Python                                            OOP           PyDev                   Fazit

Klassen



Properties, Statische und Klassenmethoden II
                 classmethod non-overriding Deskriptor
                             Erstes Argument wird an das Klassenobjekt
                             gebunden
                             Per Konvention cls genannt
                             Kann durch Instanz- oder Klassenobjekt
                             aufgerufen werden
                                             classmethod(f)
           siehe Beispiel: „ex_properties_class-level.py“ [4]




David Robakowski                                                         Fachhochschule Wedel
Python & PyDev
Python                        OOP          PyDev                      Fazit

Vererbung



Gliederung



         1 Python                   2 OOP
             Geschichte                 Objektsystem
             Eigenschaften              Klassen
             Sprachumfang               Vererbung
             Paradigmen                 Metaklassen
             Einsatzgebiete         3 PyDev
             Vor- und Nachteile         Zu PyDev
                                    4 Fazit
                                        Mein Fazit




David Robakowski                                       Fachhochschule Wedel
Python & PyDev
Python                          OOP                    PyDev                            Fazit

Vererbung



Method Resolution Order
                 Vererbung, sowie Mehrfachvererbung werden unterstützt




David Robakowski                                                         Fachhochschule Wedel
Python & PyDev
Python                          OOP                    PyDev                            Fazit

Vererbung



Method Resolution Order
                 Vererbung, sowie Mehrfachvererbung werden unterstützt
                 class Name(bases, ...)




David Robakowski                                                         Fachhochschule Wedel
Python & PyDev
Python                           OOP                    PyDev                            Fazit

Vererbung



Method Resolution Order
                 Vererbung, sowie Mehrfachvererbung werden unterstützt
                 class Name(bases, ...)
                 Es lassen sich Methoden, sowie Attribute überschreiben




David Robakowski                                                          Fachhochschule Wedel
Python & PyDev
Python                           OOP                    PyDev                            Fazit

Vererbung



Method Resolution Order
                 Vererbung, sowie Mehrfachvererbung werden unterstützt
                 class Name(bases, ...)
                 Es lassen sich Methoden, sowie Attribute überschreiben
                 Durch die Mehrfachvererbung entsteht die Frage nach MRO




David Robakowski                                                          Fachhochschule Wedel
Python & PyDev
Python                           OOP                    PyDev                            Fazit

Vererbung



Method Resolution Order
                 Vererbung, sowie Mehrfachvererbung werden unterstützt
                 class Name(bases, ...)
                 Es lassen sich Methoden, sowie Attribute überschreiben
                 Durch die Mehrfachvererbung entsteht die Frage nach MRO
                 Standardmäßig werden Attribute, Methoden in __dict__ von links
                 nach rechts gesucht




David Robakowski                                                          Fachhochschule Wedel
Python & PyDev
Python                           OOP                    PyDev                            Fazit

Vererbung



Method Resolution Order
                 Vererbung, sowie Mehrfachvererbung werden unterstützt
                 class Name(bases, ...)
                 Es lassen sich Methoden, sowie Attribute überschreiben
                 Durch die Mehrfachvererbung entsteht die Frage nach MRO
                 Standardmäßig werden Attribute, Methoden in __dict__ von links
                 nach rechts gesucht
                 Wenn Schlüssel nicht gefunden wird, wird die Suche auf
                 __bases__ fortgeführt




David Robakowski                                                          Fachhochschule Wedel
Python & PyDev
Python                           OOP                    PyDev                            Fazit

Vererbung



Method Resolution Order
                 Vererbung, sowie Mehrfachvererbung werden unterstützt
                 class Name(bases, ...)
                 Es lassen sich Methoden, sowie Attribute überschreiben
                 Durch die Mehrfachvererbung entsteht die Frage nach MRO
                 Standardmäßig werden Attribute, Methoden in __dict__ von links
                 nach rechts gesucht
                 Wenn Schlüssel nicht gefunden wird, wird die Suche auf
                 __bases__ fortgeführt
                 Unterschiedlich in old-style und new-style




David Robakowski                                                          Fachhochschule Wedel
Python & PyDev
Python              OOP                        PyDev                             Fazit

Vererbung



Method Resolution Order - classic
   Figure 5-1 [1]

                          Links nach rechts, tiefenorientiertes
                          Suchverfahren




David Robakowski                                                  Fachhochschule Wedel
Python & PyDev
Python              OOP                        PyDev                             Fazit

Vererbung



Method Resolution Order - classic
   Figure 5-1 [1]

                          Links nach rechts, tiefenorientiertes
                          Suchverfahren
                          Führt zu Problemen bei Diamantstrukturen




David Robakowski                                                  Fachhochschule Wedel
Python & PyDev
Python              OOP                        PyDev                             Fazit

Vererbung



Method Resolution Order - classic
   Figure 5-1 [1]

                          Links nach rechts, tiefenorientiertes
                          Suchverfahren
                          Führt zu Problemen bei Diamantstrukturen
                          Reihenfolge: A, B, D, C, D




David Robakowski                                                  Fachhochschule Wedel
Python & PyDev
Python              OOP                      PyDev                        Fazit

Vererbung



Method Resolution Order - new-style
   Figure 5-1 [1]

                          Löst das Problem durch Löschen von
                          doppelten Einträgen in der Liste




David Robakowski                                           Fachhochschule Wedel
Python & PyDev
Python              OOP                       PyDev                          Fazit

Vererbung



Method Resolution Order - new-style
   Figure 5-1 [1]

                          Löst das Problem durch Löschen von
                          doppelten Einträgen in der Liste
                          Gelöscht wird von rechts nach links, also neue
                          Reihenfolge: A, B, C, D, object




David Robakowski                                              Fachhochschule Wedel
Python & PyDev
Python              OOP                       PyDev                             Fazit

Vererbung



Method Resolution Order - new-style
   Figure 5-1 [1]

                          Löst das Problem durch Löschen von
                          doppelten Einträgen in der Liste
                          Gelöscht wird von rechts nach links, also neue
                          Reihenfolge: A, B, C, D, object
                          Spezialisierungen werden priorisiert




David Robakowski                                                 Fachhochschule Wedel
Python & PyDev
Python              OOP                       PyDev                             Fazit

Vererbung



Method Resolution Order - new-style
   Figure 5-1 [1]

                          Löst das Problem durch Löschen von
                          doppelten Einträgen in der Liste
                          Gelöscht wird von rechts nach links, also neue
                          Reihenfolge: A, B, C, D, object
                          Spezialisierungen werden priorisiert
                          In new-style Klassen ist immer ein __mro__
                          vorhanden




David Robakowski                                                 Fachhochschule Wedel
Python & PyDev
Python              OOP                       PyDev                             Fazit

Vererbung



Method Resolution Order - new-style
   Figure 5-1 [1]

                          Löst das Problem durch Löschen von
                          doppelten Einträgen in der Liste
                          Gelöscht wird von rechts nach links, also neue
                          Reihenfolge: A, B, C, D, object
                          Spezialisierungen werden priorisiert
                          In new-style Klassen ist immer ein __mro__
                          vorhanden
                          Ab Version 2.3 auf C3 Algorithmus umgestellt




David Robakowski                                                 Fachhochschule Wedel
Python & PyDev
Python                            OOP                    PyDev                  Fazit

Superclass calls



Kooperative superclass calls
                   Möglich durch ungebundenen super Aufruf:
                   ClassName.__init__(self, ...)




David Robakowski                                                 Fachhochschule Wedel
Python & PyDev
Python                            OOP                    PyDev                  Fazit

Superclass calls



Kooperative superclass calls
                   Möglich durch ungebundenen super Aufruf:
                   ClassName.__init__(self, ...)
                   Problematisch bei Diamantstrukturen




David Robakowski                                                 Fachhochschule Wedel
Python & PyDev
Python                              OOP                  PyDev                  Fazit

Superclass calls



Kooperative superclass calls
                   Möglich durch ungebundenen super Aufruf:
                   ClassName.__init__(self, ...)
                   Problematisch bei Diamantstrukturen
                       Im besten Fall ineffizient




David Robakowski                                                 Fachhochschule Wedel
Python & PyDev
Python                              OOP                  PyDev                  Fazit

Superclass calls



Kooperative superclass calls
                   Möglich durch ungebundenen super Aufruf:
                   ClassName.__init__(self, ...)
                   Problematisch bei Diamantstrukturen
                       Im besten Fall ineffizient
                       Im schlimmsten Fall ein Fehler




David Robakowski                                                 Fachhochschule Wedel
Python & PyDev
Python                              OOP                  PyDev                  Fazit

Superclass calls



Kooperative superclass calls
                   Möglich durch ungebundenen super Aufruf:
                   ClassName.__init__(self, ...)
                   Problematisch bei Diamantstrukturen
                       Im besten Fall ineffizient
                       Im schlimmsten Fall ein Fehler
                   Abhilfe schafft super(AClass, obj)




David Robakowski                                                 Fachhochschule Wedel
Python & PyDev
Python                              OOP                  PyDev                  Fazit

Superclass calls



Kooperative superclass calls
                   Möglich durch ungebundenen super Aufruf:
                   ClassName.__init__(self, ...)
                   Problematisch bei Diamantstrukturen
                       Im besten Fall ineffizient
                       Im schlimmsten Fall ein Fehler
                   Abhilfe schafft super(AClass, obj)
                   Mächtiger als z.B. in Java




David Robakowski                                                 Fachhochschule Wedel
Python & PyDev
Python                              OOP                    PyDev                           Fazit

Superclass calls



Kooperative superclass calls
                   Möglich durch ungebundenen super Aufruf:
                   ClassName.__init__(self, ...)
                   Problematisch bei Diamantstrukturen
                       Im besten Fall ineffizient
                       Im schlimmsten Fall ein Fehler
                   Abhilfe schafft super(AClass, obj)
                   Mächtiger als z.B. in Java
                       Analysiert und iteriert über obj.__class__.__mro__




David Robakowski                                                            Fachhochschule Wedel
Python & PyDev
Python                              OOP                    PyDev                           Fazit

Superclass calls



Kooperative superclass calls
                   Möglich durch ungebundenen super Aufruf:
                   ClassName.__init__(self, ...)
                   Problematisch bei Diamantstrukturen
                       Im besten Fall ineffizient
                       Im schlimmsten Fall ein Fehler
                   Abhilfe schafft super(AClass, obj)
                   Mächtiger als z.B. in Java
                       Analysiert und iteriert über obj.__class__.__mro__
                   super sollte bevorzugt werden




David Robakowski                                                            Fachhochschule Wedel
Python & PyDev
Python                              OOP                    PyDev                           Fazit

Superclass calls



Kooperative superclass calls
                   Möglich durch ungebundenen super Aufruf:
                   ClassName.__init__(self, ...)
                   Problematisch bei Diamantstrukturen
                       Im besten Fall ineffizient
                       Im schlimmsten Fall ein Fehler
                   Abhilfe schafft super(AClass, obj)
                   Mächtiger als z.B. in Java
                       Analysiert und iteriert über obj.__class__.__mro__
                   super sollte bevorzugt werden
                   Bei unterschiedlichen Methodensignaturen evtl. besser
                   Superklassen-Aufruf durch ungebundene Variante




David Robakowski                                                            Fachhochschule Wedel
Python & PyDev
Python                              OOP                    PyDev                           Fazit

Superclass calls



Kooperative superclass calls
                   Möglich durch ungebundenen super Aufruf:
                   ClassName.__init__(self, ...)
                   Problematisch bei Diamantstrukturen
                       Im besten Fall ineffizient
                       Im schlimmsten Fall ein Fehler
                   Abhilfe schafft super(AClass, obj)
                   Mächtiger als z.B. in Java
                       Analysiert und iteriert über obj.__class__.__mro__
                   super sollte bevorzugt werden
                   Bei unterschiedlichen Methodensignaturen evtl. besser
                   Superklassen-Aufruf durch ungebundene Variante




David Robakowski                                                            Fachhochschule Wedel
Python & PyDev
Python                                               OOP      PyDev                           Fazit

Superclass calls



Kooperative superclass calls
                   Möglich durch ungebundenen super Aufruf:
                   ClassName.__init__(self, ...)
                   Problematisch bei Diamantstrukturen
                          Im besten Fall ineffizient
                          Im schlimmsten Fall ein Fehler
                   Abhilfe schafft super(AClass, obj)
                   Mächtiger als z.B. in Java
                          Analysiert und iteriert über obj.__class__.__mro__
                   super sollte bevorzugt werden
                   Bei unterschiedlichen Methodensignaturen evtl. besser
                   Superklassen-Aufruf durch ungebundene Variante
            siehe Beispiel: „ex_superclass.py“ [4]




David Robakowski                                                               Fachhochschule Wedel
Python & PyDev
Python                              OOP             PyDev                  Fazit

Spezielle Methoden



Spezielle Methoden
                 Auch genannt als „magic-methods“




David Robakowski                                            Fachhochschule Wedel
Python & PyDev
Python                                OOP                            PyDev                              Fazit

Spezielle Methoden



Spezielle Methoden
                 Auch genannt als „magic-methods“
                 Wird implizit durch Python für jeden möglichen Zugriff auf eine Instanz ausgeführt




David Robakowski                                                                         Fachhochschule Wedel
Python & PyDev
Python                                OOP                            PyDev                              Fazit

Spezielle Methoden



Spezielle Methoden
                 Auch genannt als „magic-methods“
                 Wird implizit durch Python für jeden möglichen Zugriff auf eine Instanz ausgeführt




David Robakowski                                                                         Fachhochschule Wedel
Python & PyDev
Python                                OOP                            PyDev                              Fazit

Spezielle Methoden



Spezielle Methoden
                 Auch genannt als „magic-methods“
                 Wird implizit durch Python für jeden möglichen Zugriff auf eine Instanz ausgeführt
         Verschiedene Kategorien:




David Robakowski                                                                         Fachhochschule Wedel
Python & PyDev
Python                                OOP                             PyDev                             Fazit

Spezielle Methoden



Spezielle Methoden
                 Auch genannt als „magic-methods“
                 Wird implizit durch Python für jeden möglichen Zugriff auf eine Instanz ausgeführt
         Verschiedene Kategorien:
                   Initialisierung und Finalisierung: __new__, __init__, __del__




David Robakowski                                                                         Fachhochschule Wedel
Python & PyDev
Python                                OOP                             PyDev                             Fazit

Spezielle Methoden



Spezielle Methoden
                 Auch genannt als „magic-methods“
                 Wird implizit durch Python für jeden möglichen Zugriff auf eine Instanz ausgeführt
         Verschiedene Kategorien:
                   Initialisierung und Finalisierung: __new__, __init__, __del__
                        Repräsentation als String: __rep__, __str__, __unicode__




David Robakowski                                                                         Fachhochschule Wedel
Python & PyDev
Python                                OOP                             PyDev                             Fazit

Spezielle Methoden



Spezielle Methoden
                 Auch genannt als „magic-methods“
                 Wird implizit durch Python für jeden möglichen Zugriff auf eine Instanz ausgeführt
         Verschiedene Kategorien:
                   Initialisierung und Finalisierung: __new__, __init__, __del__
                        Repräsentation als String: __rep__, __str__, __unicode__
         Vergleiche, Hashing, Boolean-Kontext: __lt__, __le__, __gt__, __ge__, __eq__,
                                               __ne__, __cmp__, __hash__




David Robakowski                                                                         Fachhochschule Wedel
Python & PyDev
Python                                OOP                             PyDev                             Fazit

Spezielle Methoden



Spezielle Methoden
                 Auch genannt als „magic-methods“
                 Wird implizit durch Python für jeden möglichen Zugriff auf eine Instanz ausgeführt
         Verschiedene Kategorien:
                   Initialisierung und Finalisierung: __new__, __init__, __del__
                        Repräsentation als String: __rep__, __str__, __unicode__
         Vergleiche, Hashing, Boolean-Kontext: __lt__, __le__, __gt__, __ge__, __eq__,
                                               __ne__, __cmp__, __hash__
                                  Referenzierung: __getattribute__, __getattr__, __setattr__,
                                                  __delattr__




David Robakowski                                                                         Fachhochschule Wedel
Python & PyDev
Python                                OOP                             PyDev                             Fazit

Spezielle Methoden



Spezielle Methoden
                 Auch genannt als „magic-methods“
                 Wird implizit durch Python für jeden möglichen Zugriff auf eine Instanz ausgeführt
         Verschiedene Kategorien:
                   Initialisierung und Finalisierung: __new__, __init__, __del__
                        Repräsentation als String: __rep__, __str__, __unicode__
         Vergleiche, Hashing, Boolean-Kontext: __lt__, __le__, __gt__, __ge__, __eq__,
                                               __ne__, __cmp__, __hash__
                                  Referenzierung: __getattribute__, __getattr__, __setattr__,
                                                  __delattr__
                             Aufrufbare Instanzen: __callable__




David Robakowski                                                                         Fachhochschule Wedel
Python & PyDev
Python                                OOP                             PyDev                             Fazit

Spezielle Methoden



Spezielle Methoden
                 Auch genannt als „magic-methods“
                 Wird implizit durch Python für jeden möglichen Zugriff auf eine Instanz ausgeführt
         Verschiedene Kategorien:
                   Initialisierung und Finalisierung: __new__, __init__, __del__
                        Repräsentation als String: __rep__, __str__, __unicode__
         Vergleiche, Hashing, Boolean-Kontext: __lt__, __le__, __gt__, __ge__, __eq__,
                                               __ne__, __cmp__, __hash__
                                  Referenzierung: __getattribute__, __getattr__, __setattr__,
                                                  __delattr__
                             Aufrufbare Instanzen: __callable__




David Robakowski                                                                         Fachhochschule Wedel
Python & PyDev
Python                                           OOP                        PyDev                              Fazit

Spezielle Methoden



Spezielle Methoden
                 Auch genannt als „magic-methods“
                 Wird implizit durch Python für jeden möglichen Zugriff auf eine Instanz ausgeführt
         Verschiedene Kategorien:
                   Initialisierung und Finalisierung: __new__, __init__, __del__
                          Repräsentation als String: __rep__, __str__, __unicode__
         Vergleiche, Hashing, Boolean-Kontext: __lt__, __le__, __gt__, __ge__, __eq__,
                                               __ne__, __cmp__, __hash__
                                          Referenzierung: __getattribute__, __getattr__, __setattr__,
                                                          __delattr__
                                 Aufrufbare Instanzen: __callable__
           siehe Beispiel: „ex_specialmethods.py“ [4]




David Robakowski                                                                                Fachhochschule Wedel
Python & PyDev
Python                           OOP                     PyDev                          Fazit

Dekoratoren



Dekoratoren
                 Schaffen mehr Übersicht, also mehr „code readability“




David Robakowski                                                         Fachhochschule Wedel
Python & PyDev
Python                           OOP                     PyDev                          Fazit

Dekoratoren



Dekoratoren
                 Schaffen mehr Übersicht, also mehr „code readability“
                 Wird definiert durch @expression, direkt gefolgt von einem
                 def-Statement




David Robakowski                                                         Fachhochschule Wedel
Python & PyDev
Python                           OOP                     PyDev                          Fazit

Dekoratoren



Dekoratoren
                 Schaffen mehr Übersicht, also mehr „code readability“
                 Wird definiert durch @expression, direkt gefolgt von einem
                 def-Statement
                 Häufigste Anwendung @classmethod, @staticmethod




David Robakowski                                                         Fachhochschule Wedel
Python & PyDev
Python                           OOP                     PyDev                          Fazit

Dekoratoren



Dekoratoren
                 Schaffen mehr Übersicht, also mehr „code readability“
                 Wird definiert durch @expression, direkt gefolgt von einem
                 def-Statement
                 Häufigste Anwendung @classmethod, @staticmethod
                 Es lassen sich auch eigene Dekoratoren implementieren, welche
                 als höher geordnete Funktion ausgeführt wird




David Robakowski                                                         Fachhochschule Wedel
Python & PyDev
Python                           OOP                      PyDev                         Fazit

Dekoratoren



Dekoratoren
                 Schaffen mehr Übersicht, also mehr „code readability“
                 Wird definiert durch @expression, direkt gefolgt von einem
                 def-Statement
                 Häufigste Anwendung @classmethod, @staticmethod
                 Es lassen sich auch eigene Dekoratoren implementieren, welche
                 als höher geordnete Funktion ausgeführt wird
                 Die Dekoratoren verarbeiten die Funktion in der
                 Initialisierungsphase




David Robakowski                                                         Fachhochschule Wedel
Python & PyDev
Python                           OOP                      PyDev                         Fazit

Dekoratoren



Dekoratoren
                 Schaffen mehr Übersicht, also mehr „code readability“
                 Wird definiert durch @expression, direkt gefolgt von einem
                 def-Statement
                 Häufigste Anwendung @classmethod, @staticmethod
                 Es lassen sich auch eigene Dekoratoren implementieren, welche
                 als höher geordnete Funktion ausgeführt wird
                 Die Dekoratoren verarbeiten die Funktion in der
                 Initialisierungsphase




David Robakowski                                                         Fachhochschule Wedel
Python & PyDev
Python                                                 OOP   PyDev                        Fazit

Dekoratoren



Dekoratoren
                   Schaffen mehr Übersicht, also mehr „code readability“
                   Wird definiert durch @expression, direkt gefolgt von einem
                   def-Statement
                   Häufigste Anwendung @classmethod, @staticmethod
                   Es lassen sich auch eigene Dekoratoren implementieren, welche
                   als höher geordnete Funktion ausgeführt wird
                   Die Dekoratoren verarbeiten die Funktion in der
                   Initialisierungsphase
              siehe Beispiel: „ex_decorators.py“ [4]




David Robakowski                                                           Fachhochschule Wedel
Python & PyDev
Python                        OOP          PyDev                      Fazit

Metaklassen



Gliederung



         1 Python                   2 OOP
             Geschichte                 Objektsystem
             Eigenschaften              Klassen
             Sprachumfang               Vererbung
             Paradigmen                 Metaklassen
             Einsatzgebiete         3 PyDev
             Vor- und Nachteile         Zu PyDev
                                    4 Fazit
                                        Mein Fazit




David Robakowski                                       Fachhochschule Wedel
Python & PyDev
Python                            OOP                     PyDev                  Fazit

Metaklassen



Metaklassen
                 In Python haben alle Objekte einen Typ




David Robakowski                                                  Fachhochschule Wedel
Python & PyDev
Python                             OOP                       PyDev                            Fazit

Metaklassen



Metaklassen
                 In Python haben alle Objekte einen Typ
                 Der Typ eines Klassen-Objektes wird auch als die zur Klasse gehörige
                 Metaklasse bezeichnet




David Robakowski                                                               Fachhochschule Wedel
Python & PyDev
Python                             OOP                       PyDev                            Fazit

Metaklassen



Metaklassen
                 In Python haben alle Objekte einen Typ
                 Der Typ eines Klassen-Objektes wird auch als die zur Klasse gehörige
                 Metaklasse bezeichnet
                 Die Semantik einer Klasse hängt von der zugehörigen Metaklasse ab




David Robakowski                                                               Fachhochschule Wedel
Python & PyDev
Python                             OOP                       PyDev                            Fazit

Metaklassen



Metaklassen
                 In Python haben alle Objekte einen Typ
                 Der Typ eines Klassen-Objektes wird auch als die zur Klasse gehörige
                 Metaklasse bezeichnet
                 Die Semantik einer Klasse hängt von der zugehörigen Metaklasse ab
                 Der Typ einer new-style Klasse ist type




David Robakowski                                                               Fachhochschule Wedel
Python & PyDev
Python                              OOP                         PyDev                             Fazit

Metaklassen



Metaklassen
                 In Python haben alle Objekte einen Typ
                 Der Typ eines Klassen-Objektes wird auch als die zur Klasse gehörige
                 Metaklasse bezeichnet
                 Die Semantik einer Klasse hängt von der zugehörigen Metaklasse ab
                 Der Typ einer new-style Klasse ist type
                 type ist die Metaklasse von allen built-in Typen, sogar von sich selbst




David Robakowski                                                                   Fachhochschule Wedel
Python & PyDev
Python                              OOP                         PyDev                             Fazit

Metaklassen



Metaklassen
                 In Python haben alle Objekte einen Typ
                 Der Typ eines Klassen-Objektes wird auch als die zur Klasse gehörige
                 Metaklasse bezeichnet
                 Die Semantik einer Klasse hängt von der zugehörigen Metaklasse ab
                 Der Typ einer new-style Klasse ist type
                 type ist die Metaklasse von allen built-in Typen, sogar von sich selbst
                 Die Metaklasse erstellt ein Klassen-Objekt und bindet dieses Objekt an
                 den Klassennamen




David Robakowski                                                                   Fachhochschule Wedel
Python & PyDev
Python                              OOP                         PyDev                             Fazit

Metaklassen



Metaklassen
                 In Python haben alle Objekte einen Typ
                 Der Typ eines Klassen-Objektes wird auch als die zur Klasse gehörige
                 Metaklasse bezeichnet
                 Die Semantik einer Klasse hängt von der zugehörigen Metaklasse ab
                 Der Typ einer new-style Klasse ist type
                 type ist die Metaklasse von allen built-in Typen, sogar von sich selbst
                 Die Metaklasse erstellt ein Klassen-Objekt und bindet dieses Objekt an
                 den Klassennamen
                 Es lassen sich auch eigene Metaklassen implementieren




David Robakowski                                                                   Fachhochschule Wedel
Python & PyDev
Python                              OOP                         PyDev                             Fazit

Metaklassen



Metaklassen
                 In Python haben alle Objekte einen Typ
                 Der Typ eines Klassen-Objektes wird auch als die zur Klasse gehörige
                 Metaklasse bezeichnet
                 Die Semantik einer Klasse hängt von der zugehörigen Metaklasse ab
                 Der Typ einer new-style Klasse ist type
                 type ist die Metaklasse von allen built-in Typen, sogar von sich selbst
                 Die Metaklasse erstellt ein Klassen-Objekt und bindet dieses Objekt an
                 den Klassennamen
                 Es lassen sich auch eigene Metaklassen implementieren
                 Im Vergleich zu anderen Sprachen unterstützt Python somit den vollen
                 Funktionsumfang von Metaklassen




David Robakowski                                                                   Fachhochschule Wedel
Python & PyDev
Python                              OOP                         PyDev                             Fazit

Metaklassen



Metaklassen
                 In Python haben alle Objekte einen Typ
                 Der Typ eines Klassen-Objektes wird auch als die zur Klasse gehörige
                 Metaklasse bezeichnet
                 Die Semantik einer Klasse hängt von der zugehörigen Metaklasse ab
                 Der Typ einer new-style Klasse ist type
                 type ist die Metaklasse von allen built-in Typen, sogar von sich selbst
                 Die Metaklasse erstellt ein Klassen-Objekt und bindet dieses Objekt an
                 den Klassennamen
                 Es lassen sich auch eigene Metaklassen implementieren
                 Im Vergleich zu anderen Sprachen unterstützt Python somit den vollen
                 Funktionsumfang von Metaklassen




David Robakowski                                                                   Fachhochschule Wedel
Python & PyDev
Python                                                OOP         PyDev                             Fazit

Metaklassen



Metaklassen
                   In Python haben alle Objekte einen Typ
                   Der Typ eines Klassen-Objektes wird auch als die zur Klasse gehörige
                   Metaklasse bezeichnet
                   Die Semantik einer Klasse hängt von der zugehörigen Metaklasse ab
                   Der Typ einer new-style Klasse ist type
                   type ist die Metaklasse von allen built-in Typen, sogar von sich selbst
                   Die Metaklasse erstellt ein Klassen-Objekt und bindet dieses Objekt an
                   den Klassennamen
                   Es lassen sich auch eigene Metaklassen implementieren
                   Im Vergleich zu anderen Sprachen unterstützt Python somit den vollen
                   Funktionsumfang von Metaklassen
              siehe Beispiel: „ex_metaclass.py“ [4]




David Robakowski                                                                     Fachhochschule Wedel
Python & PyDev
Python                        OOP          PyDev                      Fazit

Zu PyDev



Gliederung



         1 Python                   2 OOP
             Geschichte                 Objektsystem
             Eigenschaften              Klassen
             Sprachumfang               Vererbung
             Paradigmen                 Metaklassen
             Einsatzgebiete         3 PyDev
             Vor- und Nachteile         Zu PyDev
                                    4 Fazit
                                        Mein Fazit




David Robakowski                                       Fachhochschule Wedel
Python & PyDev
Python                          OOP       PyDev                  Fazit

Zu PyDev



PyDev


                 Code Vervollständigung




David Robakowski                                  Fachhochschule Wedel
Python & PyDev
Python                           OOP      PyDev                  Fazit

Zu PyDev



PyDev


                 Code Vervollständigung
                 Syntax Highlighting




David Robakowski                                  Fachhochschule Wedel
Python & PyDev
Python                            OOP     PyDev                  Fazit

Zu PyDev



PyDev


                 Code Vervollständigung
                 Syntax Highlighting
                 Syntax Analyse




David Robakowski                                  Fachhochschule Wedel
Python & PyDev
Python                           OOP       PyDev                  Fazit

Zu PyDev



PyDev


                 Code Vervollständigung
                 Syntax Highlighting
                 Syntax Analyse
                 Code Refectoring Tools:




David Robakowski                                   Fachhochschule Wedel
Python & PyDev
Python                            OOP                        PyDev                  Fazit

Zu PyDev



PyDev


                 Code Vervollständigung
                 Syntax Highlighting
                 Syntax Analyse
                 Code Refectoring Tools:
                     Konstruktor und Instanzattribute erzeugen




David Robakowski                                                     Fachhochschule Wedel
Python & PyDev
Python                            OOP                        PyDev                  Fazit

Zu PyDev



PyDev


                 Code Vervollständigung
                 Syntax Highlighting
                 Syntax Analyse
                 Code Refectoring Tools:
                     Konstruktor und Instanzattribute erzeugen
                     Properties erzeugen




David Robakowski                                                     Fachhochschule Wedel
Python & PyDev
Python                           OOP                     PyDev                  Fazit

Zu PyDev



PyDev


                 Code Vervollständigung
                 Syntax Highlighting
                 Syntax Analyse
                 Code Refectoring Tools:
                     Konstruktor und Instanzattribute erzeugen
                     Properties erzeugen
                     Überschreiben/Implementieren von Methoden




David Robakowski                                                 Fachhochschule Wedel
Python & PyDev
Python                           OOP                     PyDev                  Fazit

Zu PyDev



PyDev


                 Code Vervollständigung
                 Syntax Highlighting
                 Syntax Analyse
                 Code Refectoring Tools:
                     Konstruktor und Instanzattribute erzeugen
                     Properties erzeugen
                     Überschreiben/Implementieren von Methoden
                 Debugger




David Robakowski                                                 Fachhochschule Wedel
Python & PyDev
Python                           OOP                     PyDev                  Fazit

Zu PyDev



PyDev


                 Code Vervollständigung
                 Syntax Highlighting
                 Syntax Analyse
                 Code Refectoring Tools:
                     Konstruktor und Instanzattribute erzeugen
                     Properties erzeugen
                     Überschreiben/Implementieren von Methoden
                 Debugger
                 Templates




David Robakowski                                                 Fachhochschule Wedel
Python & PyDev
Python                           OOP                     PyDev                  Fazit

Zu PyDev



PyDev


                 Code Vervollständigung
                 Syntax Highlighting
                 Syntax Analyse
                 Code Refectoring Tools:
                     Konstruktor und Instanzattribute erzeugen
                     Properties erzeugen
                     Überschreiben/Implementieren von Methoden
                 Debugger
                 Templates
                 Interaktive Konsole



David Robakowski                                                 Fachhochschule Wedel
Python & PyDev
Python                        OOP          PyDev                      Fazit

Mein Fazit



Gliederung



         1 Python                   2 OOP
             Geschichte                 Objektsystem
             Eigenschaften              Klassen
             Sprachumfang               Vererbung
             Paradigmen                 Metaklassen
             Einsatzgebiete         3 PyDev
             Vor- und Nachteile         Zu PyDev
                                    4 Fazit
                                        Mein Fazit




David Robakowski                                       Fachhochschule Wedel
Python & PyDev
Python                           OOP       PyDev                  Fazit

Mein Fazit



Fazit
                 Sehr leicht zu erlernen




David Robakowski                                   Fachhochschule Wedel
Python & PyDev
Python                           OOP                     PyDev                          Fazit

Mein Fazit



Fazit
                 Sehr leicht zu erlernen
                 Extrem flexibel, durch Objekt-Modell, super(), __mro__




David Robakowski                                                         Fachhochschule Wedel
Python & PyDev
Python                           OOP                     PyDev                          Fazit

Mein Fazit



Fazit
                 Sehr leicht zu erlernen
                 Extrem flexibel, durch Objekt-Modell, super(), __mro__
                 Macht Spaß zu entwickeln




David Robakowski                                                         Fachhochschule Wedel
Python & PyDev
Python                           OOP                      PyDev                          Fazit

Mein Fazit



Fazit
                 Sehr leicht zu erlernen
                 Extrem flexibel, durch Objekt-Modell, super(), __mro__
                 Macht Spaß zu entwickeln
                 Es lassen sich durch die Menge an Bibliotheken in kürzester Zeit
                 umfangreiche Programme erstellen




David Robakowski                                                          Fachhochschule Wedel
Python & PyDev
Python                           OOP                      PyDev                          Fazit

Mein Fazit



Fazit
                 Sehr leicht zu erlernen
                 Extrem flexibel, durch Objekt-Modell, super(), __mro__
                 Macht Spaß zu entwickeln
                 Es lassen sich durch die Menge an Bibliotheken in kürzester Zeit
                 umfangreiche Programme erstellen
                 Python könnte an der einen oder anderen Stelle ein wenig
                 konsequenter sein, z.B. bei der Kapselung




David Robakowski                                                          Fachhochschule Wedel
Python & PyDev
Python                            OOP                       PyDev                       Fazit

Mein Fazit



Literatur & weiterführende Links


                 Python in a Nutshell, 2nd Edition, Alex Martelli
                 Dive Into Python, http://diveintopython.org
                 Python, http://python.org
                 Alle Code-Beispiele finden Sie auf meiner Homepage
                 http://www.robakowski.com
                 Die ausführliche Ausarbeitung zur Präsentation finden Sie unter
                 http://python.robakowski.com




David Robakowski                                                         Fachhochschule Wedel
Python & PyDev

Python & PyDev

  • 1.
    Python OOP PyDev Fazit Alternative objektorientiere Programmiersprachen Python & PyDev David Robakowski Fachhochschule Wedel Juli 11, 2009 David Robakowski Fachhochschule Wedel Python & PyDev
  • 2.
    Python OOP PyDev Fazit Gliederung 1 Python 2 OOP Geschichte Objektsystem Eigenschaften Klassen Sprachumfang Vererbung Paradigmen Metaklassen Einsatzgebiete 3 PyDev Vor- und Nachteile Zu PyDev 4 Fazit Mein Fazit David Robakowski Fachhochschule Wedel Python & PyDev
  • 3.
    Python OOP PyDev Fazit Geschichte Gliederung 1 Python 2 OOP Geschichte Objektsystem Eigenschaften Klassen Sprachumfang Vererbung Paradigmen Metaklassen Einsatzgebiete 3 PyDev Vor- und Nachteile Zu PyDev 4 Fazit Mein Fazit David Robakowski Fachhochschule Wedel Python & PyDev
  • 4.
    Python OOP PyDev Fazit Geschichte Zur Geschichte von Python Entwickelt Anfang der 90er Jahre von Guido van Rossum am Zentrum für Mathematik und Informatik in Amsterdam David Robakowski Fachhochschule Wedel Python & PyDev
  • 5.
    Python OOP PyDev Fazit Geschichte Zur Geschichte von Python Entwickelt Anfang der 90er Jahre von Guido van Rossum am Zentrum für Mathematik und Informatik in Amsterdam Wurde ursprünglich für das verteilte Betriebssystem Amoeba entwickelt, als Nachfolger für die Lehrsprache ABC David Robakowski Fachhochschule Wedel Python & PyDev
  • 6.
    Python OOP PyDev Fazit Geschichte Zur Geschichte von Python Entwickelt Anfang der 90er Jahre von Guido van Rossum am Zentrum für Mathematik und Informatik in Amsterdam Wurde ursprünglich für das verteilte Betriebssystem Amoeba entwickelt, als Nachfolger für die Lehrsprache ABC Namensherkunft: Britische Komikergruppe „Monty Python“ David Robakowski Fachhochschule Wedel Python & PyDev
  • 7.
    Python OOP PyDev Fazit Eigenschaften Gliederung 1 Python 2 OOP Geschichte Objektsystem Eigenschaften Klassen Sprachumfang Vererbung Paradigmen Metaklassen Einsatzgebiete 3 PyDev Vor- und Nachteile Zu PyDev 4 Fazit Mein Fazit David Robakowski Fachhochschule Wedel Python & PyDev
  • 8.
    Python OOP PyDev Fazit Eigenschaften Eigenschaften von Python Simpel Schnell, einfach und übersichtlich(Einrückung) programmieren David Robakowski Fachhochschule Wedel Python & PyDev
  • 9.
    Python OOP PyDev Fazit Eigenschaften Eigenschaften von Python Simpel Schnell, einfach und übersichtlich(Einrückung) programmieren Höhere Programmiersprache Garbage-Collector David Robakowski Fachhochschule Wedel Python & PyDev
  • 10.
    Python OOP PyDev Fazit Eigenschaften Eigenschaften von Python Simpel Schnell, einfach und übersichtlich(Einrückung) programmieren Höhere Programmiersprache Garbage-Collector Bibliotheken Umfangreiche Bibliotheken aus den unterschiedlichsten Bereichen: z.B. Datenbanken, Audio/Video, GUI, Web, ... David Robakowski Fachhochschule Wedel Python & PyDev
  • 11.
    Python OOP PyDev Fazit Eigenschaften Eigenschaften von Python Simpel Schnell, einfach und übersichtlich(Einrückung) programmieren Höhere Programmiersprache Garbage-Collector Bibliotheken Umfangreiche Bibliotheken aus den unterschiedlichsten Bereichen: z.B. Datenbanken, Audio/Video, GUI, Web, ... Portabel Linux/Unix, Windows, Mac, OS 2, ... David Robakowski Fachhochschule Wedel Python & PyDev
  • 12.
    Python OOP PyDev Fazit Eigenschaften Eigenschaften von Python Simpel Schnell, einfach und übersichtlich(Einrückung) programmieren Höhere Programmiersprache Garbage-Collector Bibliotheken Umfangreiche Bibliotheken aus den unterschiedlichsten Bereichen: z.B. Datenbanken, Audio/Video, GUI, Web, ... Portabel Linux/Unix, Windows, Mac, OS 2, ... Interpretiert Zwischencode wird von Interpreter ausgeführt David Robakowski Fachhochschule Wedel Python & PyDev
  • 13.
    Python OOP PyDev Fazit Eigenschaften Eigenschaften von Python II Objektorientiert Sehr flexibel und mächtig David Robakowski Fachhochschule Wedel Python & PyDev
  • 14.
    Python OOP PyDev Fazit Eigenschaften Eigenschaften von Python II Objektorientiert Sehr flexibel und mächtig Erweiterbar z.B. durch C/C++ Bibliotheken, falls mehr Performance benötigt wird David Robakowski Fachhochschule Wedel Python & PyDev
  • 15.
    Python OOP PyDev Fazit Eigenschaften Eigenschaften von Python II Objektorientiert Sehr flexibel und mächtig Erweiterbar z.B. durch C/C++ Bibliotheken, falls mehr Performance benötigt wird Integrierbar Integration in andere Programmierumgebungen wie z.B. .Net, Java, COM, CORBA, C und C++ David Robakowski Fachhochschule Wedel Python & PyDev
  • 16.
    Python OOP PyDev Fazit Eigenschaften Eigenschaften von Python II Objektorientiert Sehr flexibel und mächtig Erweiterbar z.B. durch C/C++ Bibliotheken, falls mehr Performance benötigt wird Integrierbar Integration in andere Programmierumgebungen wie z.B. .Net, Java, COM, CORBA, C und C++ Dynamik Dynamik durch Möglichkeit des Mischens unterschiedlicher Programmierparadigmen David Robakowski Fachhochschule Wedel Python & PyDev
  • 17.
    Python OOP PyDev Fazit Eigenschaften Eigenschaften von Python II Objektorientiert Sehr flexibel und mächtig Erweiterbar z.B. durch C/C++ Bibliotheken, falls mehr Performance benötigt wird Integrierbar Integration in andere Programmierumgebungen wie z.B. .Net, Java, COM, CORBA, C und C++ Dynamik Dynamik durch Möglichkeit des Mischens unterschiedlicher Programmierparadigmen Open Source Große Community David Robakowski Fachhochschule Wedel Python & PyDev
  • 18.
    Python OOP PyDev Fazit Sprachumfang Gliederung 1 Python 2 OOP Geschichte Objektsystem Eigenschaften Klassen Sprachumfang Vererbung Paradigmen Metaklassen Einsatzgebiete 3 PyDev Vor- und Nachteile Zu PyDev 4 Fazit Mein Fazit David Robakowski Fachhochschule Wedel Python & PyDev
  • 19.
    Python OOP PyDev Fazit Sprachumfang Sprachumfang Sprachelemente False else lambda None except nonlocal True exec not and finally or assert for pass break from raise class global return continue if try def import while del in with elif is yield David Robakowski Fachhochschule Wedel Python & PyDev
  • 20.
    Python OOP PyDev Fazit Sprachumfang Datentypen Python ist dynamisch getypt, es gibt also keine explizite Datentypdeklaration David Robakowski Fachhochschule Wedel Python & PyDev
  • 21.
    Python OOP PyDev Fazit Sprachumfang Datentypen Python ist dynamisch getypt, es gibt also keine explizite Datentypdeklaration ...jedoch streng getypt David Robakowski Fachhochschule Wedel Python & PyDev
  • 22.
    Python OOP PyDev Fazit Sprachumfang Datentypen Python ist dynamisch getypt, es gibt also keine explizite Datentypdeklaration ...jedoch streng getypt Alle Datentypen sind Objekte David Robakowski Fachhochschule Wedel Python & PyDev
  • 23.
    Python OOP PyDev Fazit Sprachumfang Datentypen Python ist dynamisch getypt, es gibt also keine explizite Datentypdeklaration ...jedoch streng getypt Alle Datentypen sind Objekte Werden auch built-in types bezeichnet David Robakowski Fachhochschule Wedel Python & PyDev
  • 24.
    Python OOP PyDev Fazit Sprachumfang Datentypen Python ist dynamisch getypt, es gibt also keine explizite Datentypdeklaration ...jedoch streng getypt Alle Datentypen sind Objekte Werden auch built-in types bezeichnet Die Klasse object bildet dabei die Oberklasse von allen Typen und new-style Klassen David Robakowski Fachhochschule Wedel Python & PyDev
  • 25.
    Python OOP PyDev Fazit Sprachumfang Datentypen II Python besitzt für die unterschiedlichsten Gebiete „built-in types“: David Robakowski Fachhochschule Wedel Python & PyDev
  • 26.
    Python OOP PyDev Fazit Sprachumfang Datentypen II Python besitzt für die unterschiedlichsten Gebiete „built-in types“: Numerische: int, float, komplexe Zahlen David Robakowski Fachhochschule Wedel Python & PyDev
  • 27.
    Python OOP PyDev Fazit Sprachumfang Datentypen II Python besitzt für die unterschiedlichsten Gebiete „built-in types“: Numerische: int, float, komplexe Zahlen Sequenzen: string, tupel, list David Robakowski Fachhochschule Wedel Python & PyDev
  • 28.
    Python OOP PyDev Fazit Sprachumfang Datentypen II Python besitzt für die unterschiedlichsten Gebiete „built-in types“: Numerische: int, float, komplexe Zahlen Sequenzen: string, tupel, list Mengen: set, frozenset David Robakowski Fachhochschule Wedel Python & PyDev
  • 29.
    Python OOP PyDev Fazit Sprachumfang Datentypen II Python besitzt für die unterschiedlichsten Gebiete „built-in types“: Numerische: int, float, komplexe Zahlen Sequenzen: string, tupel, list Mengen: set, frozenset Dictionaries: {key: value,...} David Robakowski Fachhochschule Wedel Python & PyDev
  • 30.
    Python OOP PyDev Fazit Sprachumfang Datentypen II Python besitzt für die unterschiedlichsten Gebiete „built-in types“: Numerische: int, float, komplexe Zahlen Sequenzen: string, tupel, list Mengen: set, frozenset Dictionaries: {key: value,...} Verschiedenes: None, Callable, Boolean David Robakowski Fachhochschule Wedel Python & PyDev
  • 31.
    Python OOP PyDev Fazit Sprachumfang Code Beispiel Connection String Builder [2] def buildConnectionString(params): """Build a connection string from a dictionary of parameters. Returns string.""" return ";".join(["%s=%s" % (k, v) for k, v in params.items()]) if __name__ == "__main__": myParams = {"server":"mpilgrim", "database":"master", "uid":"sa", "pwd":"secret" } print buildConnectionString(myParams) David Robakowski Fachhochschule Wedel Python & PyDev
  • 32.
    Python OOP PyDev Fazit Paradigmen Gliederung 1 Python 2 OOP Geschichte Objektsystem Eigenschaften Klassen Sprachumfang Vererbung Paradigmen Metaklassen Einsatzgebiete 3 PyDev Vor- und Nachteile Zu PyDev 4 Fazit Mein Fazit David Robakowski Fachhochschule Wedel Python & PyDev
  • 33.
    Python OOP PyDev Fazit Paradigmen Programmierparadigmen Vollständige Unterstützung David Robakowski Fachhochschule Wedel Python & PyDev
  • 34.
    Python OOP PyDev Fazit Paradigmen Programmierparadigmen Vollständige Unterstützung Strukturierter Programmierung Module, Prozeduren und Funktionen David Robakowski Fachhochschule Wedel Python & PyDev
  • 35.
    Python OOP PyDev Fazit Paradigmen Programmierparadigmen Vollständige Unterstützung Strukturierter Programmierung Module, Prozeduren und Funktionen Objektorientierter Programmierung Klassen, Vererbung, spezielle Methoden... David Robakowski Fachhochschule Wedel Python & PyDev
  • 36.
    Python OOP PyDev Fazit Paradigmen Programmierparadigmen Vollständige Unterstützung Strukturierter Programmierung Module, Prozeduren und Funktionen Objektorientierter Programmierung Klassen, Vererbung, spezielle Methoden... Es gibt Spracheigenschaften aus David Robakowski Fachhochschule Wedel Python & PyDev
  • 37.
    Python OOP PyDev Fazit Paradigmen Programmierparadigmen Vollständige Unterstützung Strukturierter Programmierung Module, Prozeduren und Funktionen Objektorientierter Programmierung Klassen, Vererbung, spezielle Methoden... Es gibt Spracheigenschaften aus Funktionaler Programmierung Funktionen, Blöcke, Rekursion, Listen... David Robakowski Fachhochschule Wedel Python & PyDev
  • 38.
    Python OOP PyDev Fazit Paradigmen Programmierparadigmen Vollständige Unterstützung Strukturierter Programmierung Module, Prozeduren und Funktionen Objektorientierter Programmierung Klassen, Vererbung, spezielle Methoden... Es gibt Spracheigenschaften aus Funktionaler Programmierung Funktionen, Blöcke, Rekursion, Listen... Python ist eine Multiparadigmen Sprache David Robakowski Fachhochschule Wedel Python & PyDev
  • 39.
    Python OOP PyDev Fazit Paradigmen Programmierparadigmen Vollständige Unterstützung Strukturierter Programmierung Module, Prozeduren und Funktionen Objektorientierter Programmierung Klassen, Vererbung, spezielle Methoden... Es gibt Spracheigenschaften aus Funktionaler Programmierung Funktionen, Blöcke, Rekursion, Listen... Python ist eine Multiparadigmen Sprache erlaubt dem Benutzer das für das aktuelle Problem am besten passende Paradigma zu wählen David Robakowski Fachhochschule Wedel Python & PyDev
  • 40.
    Python OOP PyDev Fazit Paradigmen Programmierparadigmen Vollständige Unterstützung Strukturierter Programmierung Module, Prozeduren und Funktionen Objektorientierter Programmierung Klassen, Vererbung, spezielle Methoden... Es gibt Spracheigenschaften aus Funktionaler Programmierung Funktionen, Blöcke, Rekursion, Listen... Python ist eine Multiparadigmen Sprache erlaubt dem Benutzer das für das aktuelle Problem am besten passende Paradigma zu wählen der Benutzer kann mixen David Robakowski Fachhochschule Wedel Python & PyDev
  • 41.
    Python OOP PyDev Fazit Einsatzgebiete Gliederung 1 Python 2 OOP Geschichte Objektsystem Eigenschaften Klassen Sprachumfang Vererbung Paradigmen Metaklassen Einsatzgebiete 3 PyDev Vor- und Nachteile Zu PyDev 4 Fazit Mein Fazit David Robakowski Fachhochschule Wedel Python & PyDev
  • 42.
    Python OOP PyDev Fazit Einsatzgebiete Einsatzgebiete Viele bekannte Firmen und Institutionen setzen auf Python und fördern diese. Dazu gehören z.B.: Google, YouTube David Robakowski Fachhochschule Wedel Python & PyDev
  • 43.
    Python OOP PyDev Fazit Einsatzgebiete Einsatzgebiete Viele bekannte Firmen und Institutionen setzen auf Python und fördern diese. Dazu gehören z.B.: Google, YouTube NASA David Robakowski Fachhochschule Wedel Python & PyDev
  • 44.
    Python OOP PyDev Fazit Einsatzgebiete Einsatzgebiete Viele bekannte Firmen und Institutionen setzen auf Python und fördern diese. Dazu gehören z.B.: Google, YouTube NASA ... David Robakowski Fachhochschule Wedel Python & PyDev
  • 45.
    Python OOP PyDev Fazit Einsatzgebiete Einsatzgebiete Viele bekannte Firmen und Institutionen setzen auf Python und fördern diese. Dazu gehören z.B.: Google, YouTube NASA ... David Robakowski Fachhochschule Wedel Python & PyDev
  • 46.
    Python OOP PyDev Fazit Einsatzgebiete Einsatzgebiete Viele bekannte Firmen und Institutionen setzen auf Python und fördern diese. Dazu gehören z.B.: Google, YouTube NASA ... Eingesetzt wird Python hauptsächlich in den Bereichen: Prototyping Mit Python lassen sich sehr schnell Prototypen erstellen David Robakowski Fachhochschule Wedel Python & PyDev
  • 47.
    Python OOP PyDev Fazit Einsatzgebiete Einsatzgebiete Viele bekannte Firmen und Institutionen setzen auf Python und fördern diese. Dazu gehören z.B.: Google, YouTube NASA ... Eingesetzt wird Python hauptsächlich in den Bereichen: Prototyping Mit Python lassen sich sehr schnell Prototypen erstellen Embedded Skripting Interface Wird z.B. bei OpenOffice, Blender, Maya, PyMOL, SPSS und GIMP verwendet David Robakowski Fachhochschule Wedel Python & PyDev
  • 48.
    Python OOP PyDev Fazit Einsatzgebiete Einsatzgebiete Viele bekannte Firmen und Institutionen setzen auf Python und fördern diese. Dazu gehören z.B.: Google, YouTube NASA ... Eingesetzt wird Python hauptsächlich in den Bereichen: Prototyping Mit Python lassen sich sehr schnell Prototypen erstellen Embedded Skripting Interface Wird z.B. bei OpenOffice, Blender, Maya, PyMOL, SPSS und GIMP verwendet Web-Umfeld Hier gibt es zahlreiche Web-Frameworks mit denen sich in kürzester Zeit gut skalierbare Websites erstellen lassen. Dazu zählen etwa Frameworks wie: David Robakowski Fachhochschule Wedel Python & PyDev
  • 49.
    Python OOP PyDev Fazit Einsatzgebiete Einsatzgebiete Viele bekannte Firmen und Institutionen setzen auf Python und fördern diese. Dazu gehören z.B.: Google, YouTube NASA ... Eingesetzt wird Python hauptsächlich in den Bereichen: Prototyping Mit Python lassen sich sehr schnell Prototypen erstellen Embedded Skripting Interface Wird z.B. bei OpenOffice, Blender, Maya, PyMOL, SPSS und GIMP verwendet Web-Umfeld Hier gibt es zahlreiche Web-Frameworks mit denen sich in kürzester Zeit gut skalierbare Websites erstellen lassen. Dazu zählen etwa Frameworks wie: Django Ähnlich wie das bekannte Ruby On Rails Framework David Robakowski Fachhochschule Wedel Python & PyDev
  • 50.
    Python OOP PyDev Fazit Einsatzgebiete Einsatzgebiete Viele bekannte Firmen und Institutionen setzen auf Python und fördern diese. Dazu gehören z.B.: Google, YouTube NASA ... Eingesetzt wird Python hauptsächlich in den Bereichen: Prototyping Mit Python lassen sich sehr schnell Prototypen erstellen Embedded Skripting Interface Wird z.B. bei OpenOffice, Blender, Maya, PyMOL, SPSS und GIMP verwendet Web-Umfeld Hier gibt es zahlreiche Web-Frameworks mit denen sich in kürzester Zeit gut skalierbare Websites erstellen lassen. Dazu zählen etwa Frameworks wie: Django Ähnlich wie das bekannte Ruby On Rails Framework TurboGears Vergleichbar mit Django, soll jedoch besser für große Projekte geeignet sein David Robakowski Fachhochschule Wedel Python & PyDev
  • 51.
    Python OOP PyDev Fazit Einsatzgebiete Einsatzgebiete Viele bekannte Firmen und Institutionen setzen auf Python und fördern diese. Dazu gehören z.B.: Google, YouTube NASA ... Eingesetzt wird Python hauptsächlich in den Bereichen: Prototyping Mit Python lassen sich sehr schnell Prototypen erstellen Embedded Skripting Interface Wird z.B. bei OpenOffice, Blender, Maya, PyMOL, SPSS und GIMP verwendet Web-Umfeld Hier gibt es zahlreiche Web-Frameworks mit denen sich in kürzester Zeit gut skalierbare Websites erstellen lassen. Dazu zählen etwa Frameworks wie: Django Ähnlich wie das bekannte Ruby On Rails Framework TurboGears Vergleichbar mit Django, soll jedoch besser für große Projekte geeignet sein Google App Engine Bis zu einem gewissen Traffic sogar kostenloses Hosting David Robakowski Fachhochschule Wedel Python & PyDev
  • 52.
    Python OOP PyDev Fazit Vor- und Nachteile Gliederung 1 Python 2 OOP Geschichte Objektsystem Eigenschaften Klassen Sprachumfang Vererbung Paradigmen Metaklassen Einsatzgebiete 3 PyDev Vor- und Nachteile Zu PyDev 4 Fazit Mein Fazit David Robakowski Fachhochschule Wedel Python & PyDev
  • 53.
    Python OOP PyDev Fazit Vor- und Nachteile Vor- und Nachteile Vorteile: Kritik: Schnelles Testen durch interaktive Konsole möglich David Robakowski Fachhochschule Wedel Python & PyDev
  • 54.
    Python OOP PyDev Fazit Vor- und Nachteile Vor- und Nachteile Vorteile: Kritik: Schnelles Testen durch Fehleranfällig durch interaktive Konsole dynamische Typisierung; möglich Fehler werden erst zur Laufzeit erkannt David Robakowski Fachhochschule Wedel Python & PyDev
  • 55.
    Python OOP PyDev Fazit Vor- und Nachteile Vor- und Nachteile Vorteile: Kritik: Schnelles Testen durch Fehleranfällig durch interaktive Konsole dynamische Typisierung; möglich Fehler werden erst zur Klare, gut überschaubare Laufzeit erkannt und lesbare Syntax David Robakowski Fachhochschule Wedel Python & PyDev
  • 56.
    Python OOP PyDev Fazit Vor- und Nachteile Vor- und Nachteile Vorteile: Kritik: Schnelles Testen durch Fehleranfällig durch interaktive Konsole dynamische Typisierung; möglich Fehler werden erst zur Klare, gut überschaubare Laufzeit erkannt und lesbare Syntax Es werden Sprachelemente wie z.B. switch oder do-while vermisst David Robakowski Fachhochschule Wedel Python & PyDev
  • 57.
    Python OOP PyDev Fazit Vor- und Nachteile Vor- und Nachteile Vorteile: Kritik: Schnelles Testen durch Fehleranfällig durch interaktive Konsole dynamische Typisierung; möglich Fehler werden erst zur Klare, gut überschaubare Laufzeit erkannt und lesbare Syntax Es werden Sehr große Sprachelemente wie z.B. Standardbibliothek switch oder do-while vermisst David Robakowski Fachhochschule Wedel Python & PyDev
  • 58.
    Python OOP PyDev Fazit Objektsystem Gliederung 1 Python 2 OOP Geschichte Objektsystem Eigenschaften Klassen Sprachumfang Vererbung Paradigmen Metaklassen Einsatzgebiete 3 PyDev Vor- und Nachteile Zu PyDev 4 Fazit Mein Fazit David Robakowski Fachhochschule Wedel Python & PyDev
  • 59.
    Python OOP PyDev Fazit Objektsystem Objektsystem Old-Style Objekt-Modell New-Style Objekt-Modell Auch bekannt als „classic“ oder „legacy“ Objekt-Modell David Robakowski Fachhochschule Wedel Python & PyDev
  • 60.
    Python OOP PyDev Fazit Objektsystem Objektsystem Old-Style Objekt-Modell New-Style Objekt-Modell Auch bekannt als „classic“ oder „legacy“ Objekt-Modell In allen Python 2.x Versionen aus Kompatibilitätsgründen als Default eingestellt David Robakowski Fachhochschule Wedel Python & PyDev
  • 61.
    Python OOP PyDev Fazit Objektsystem Objektsystem Old-Style Objekt-Modell New-Style Objekt-Modell Auch bekannt als „classic“ oder „legacy“ Objekt-Modell In allen Python 2.x Versionen aus Kompatibilitätsgründen als Default eingestellt Klassen-Objekt ist vom Typ <type ’class’> David Robakowski Fachhochschule Wedel Python & PyDev
  • 62.
    Python OOP PyDev Fazit Objektsystem Objektsystem Old-Style Objekt-Modell New-Style Objekt-Modell Auch bekannt als „classic“ Einfacher, regulärer und oder „legacy“ Objekt-Modell mächtiger In allen Python 2.x Versionen aus Kompatibilitätsgründen als Default eingestellt Klassen-Objekt ist vom Typ <type ’class’> David Robakowski Fachhochschule Wedel Python & PyDev
  • 63.
    Python OOP PyDev Fazit Objektsystem Objektsystem Old-Style Objekt-Modell New-Style Objekt-Modell Auch bekannt als „classic“ Einfacher, regulärer und oder „legacy“ Objekt-Modell mächtiger In allen Python 2.x Versionen Klassen-Objekt ist von einem aus Kompatibilitätsgründen als anderen Typ, Default eingestellt <type ’type’> Klassen-Objekt ist vom Typ <type ’class’> David Robakowski Fachhochschule Wedel Python & PyDev
  • 64.
    Python OOP PyDev Fazit Objektsystem Objektsystem Old-Style Objekt-Modell New-Style Objekt-Modell Auch bekannt als „classic“ Einfacher, regulärer und oder „legacy“ Objekt-Modell mächtiger In allen Python 2.x Versionen Klassen-Objekt ist von einem aus Kompatibilitätsgründen als anderen Typ, Default eingestellt <type ’type’> Klassen-Objekt ist vom Typ In Zukunft, also ab Python 3.0, <type ’class’> werden nur noch New-Style Klassen erlaubt sein David Robakowski Fachhochschule Wedel Python & PyDev
  • 65.
    Python OOP PyDev Fazit Objektsystem Objektsystem Old-Style Objekt-Modell New-Style Objekt-Modell Auch bekannt als „classic“ Einfacher, regulärer und oder „legacy“ Objekt-Modell mächtiger In allen Python 2.x Versionen Klassen-Objekt ist von einem aus Kompatibilitätsgründen als anderen Typ, Default eingestellt <type ’type’> Klassen-Objekt ist vom Typ In Zukunft, also ab Python 3.0, <type ’class’> werden nur noch New-Style Klassen erlaubt sein David Robakowski Fachhochschule Wedel Python & PyDev
  • 66.
    Python OOP PyDev Fazit Objektsystem Objektsystem Old-Style Objekt-Modell New-Style Objekt-Modell Auch bekannt als „classic“ Einfacher, regulärer und oder „legacy“ Objekt-Modell mächtiger In allen Python 2.x Versionen Klassen-Objekt ist von einem aus Kompatibilitätsgründen als anderen Typ, Default eingestellt <type ’type’> Klassen-Objekt ist vom Typ In Zukunft, also ab Python 3.0, <type ’class’> werden nur noch New-Style Klassen erlaubt sein siehe Beispiel: „ex_object_models.py“ [4] David Robakowski Fachhochschule Wedel Python & PyDev
  • 67.
    Python OOP PyDev Fazit Klassen Gliederung 1 Python 2 OOP Geschichte Objektsystem Eigenschaften Klassen Sprachumfang Vererbung Paradigmen Metaklassen Einsatzgebiete 3 PyDev Vor- und Nachteile Zu PyDev 4 Fazit Mein Fazit David Robakowski Fachhochschule Wedel Python & PyDev
  • 68.
    Python OOP PyDev Fazit Klassen Klassen Klassen haben in Python unterschiedliche Eigenschaften: Klassen ohne Basis stellen eine „old-style Klasse“ dar David Robakowski Fachhochschule Wedel Python & PyDev
  • 69.
    Python OOP PyDev Fazit Klassen Klassen Klassen haben in Python unterschiedliche Eigenschaften: Klassen ohne Basis stellen eine „old-style Klasse“ dar Klassen lassen sich wie Funktionen aufrufen, gehören also zu den callable Typen David Robakowski Fachhochschule Wedel Python & PyDev
  • 70.
    Python OOP PyDev Fazit Klassen Klassen Klassen haben in Python unterschiedliche Eigenschaften: Klassen ohne Basis stellen eine „old-style Klasse“ dar Klassen lassen sich wie Funktionen aufrufen, gehören also zu den callable Typen Instanzierung erfolgt durch den Aufruf des Klassennamens David Robakowski Fachhochschule Wedel Python & PyDev
  • 71.
    Python OOP PyDev Fazit Klassen Klassen Klassen haben in Python unterschiedliche Eigenschaften: Klassen ohne Basis stellen eine „old-style Klasse“ dar Klassen lassen sich wie Funktionen aufrufen, gehören also zu den callable Typen Instanzierung erfolgt durch den Aufruf des Klassennamens Klassen besitzen Attribute welche „gebunden“ und referenziert werden können David Robakowski Fachhochschule Wedel Python & PyDev
  • 72.
    Python OOP PyDev Fazit Klassen Klassen Klassen haben in Python unterschiedliche Eigenschaften: Klassen ohne Basis stellen eine „old-style Klasse“ dar Klassen lassen sich wie Funktionen aufrufen, gehören also zu den callable Typen Instanzierung erfolgt durch den Aufruf des Klassennamens Klassen besitzen Attribute welche „gebunden“ und referenziert werden können Werte von Klassenattribute können einfache Datenobjekte, komplexere wie etwa Deskriptoren oder etwa spezielle Methoden sein David Robakowski Fachhochschule Wedel Python & PyDev
  • 73.
    Python OOP PyDev Fazit Klassen Klassen Klassen haben in Python unterschiedliche Eigenschaften: Klassen ohne Basis stellen eine „old-style Klasse“ dar Klassen lassen sich wie Funktionen aufrufen, gehören also zu den callable Typen Instanzierung erfolgt durch den Aufruf des Klassennamens Klassen besitzen Attribute welche „gebunden“ und referenziert werden können Werte von Klassenattribute können einfache Datenobjekte, komplexere wie etwa Deskriptoren oder etwa spezielle Methoden sein Das Verschachteln von Klassen ist möglich David Robakowski Fachhochschule Wedel Python & PyDev
  • 74.
    Python OOP PyDev Fazit Klassen Klassen Klassen haben in Python unterschiedliche Eigenschaften: Klassen ohne Basis stellen eine „old-style Klasse“ dar Klassen lassen sich wie Funktionen aufrufen, gehören also zu den callable Typen Instanzierung erfolgt durch den Aufruf des Klassennamens Klassen besitzen Attribute welche „gebunden“ und referenziert werden können Werte von Klassenattribute können einfache Datenobjekte, komplexere wie etwa Deskriptoren oder etwa spezielle Methoden sein Das Verschachteln von Klassen ist möglich Vererbung und Mehrfachvererbung werden unterstützt David Robakowski Fachhochschule Wedel Python & PyDev
  • 75.
    Python OOP PyDev Fazit Klassen Klassen II Klassen haben in Python unterschiedliche Eigenschaften: Zugriff auf Instanzen durch die Punktnotation David Robakowski Fachhochschule Wedel Python & PyDev
  • 76.
    Python OOP PyDev Fazit Klassen Klassen II Klassen haben in Python unterschiedliche Eigenschaften: Zugriff auf Instanzen durch die Punktnotation Es gibt static-, sowie class-Methoden David Robakowski Fachhochschule Wedel Python & PyDev
  • 77.
    Python OOP PyDev Fazit Klassen Klassen II Klassen haben in Python unterschiedliche Eigenschaften: Zugriff auf Instanzen durch die Punktnotation Es gibt static-, sowie class-Methoden gebundene und ungebundene Methoden David Robakowski Fachhochschule Wedel Python & PyDev
  • 78.
    Python OOP PyDev Fazit Klassen Klassen II Klassen haben in Python unterschiedliche Eigenschaften: Zugriff auf Instanzen durch die Punktnotation Es gibt static-, sowie class-Methoden gebundene und ungebundene Methoden Es lässt sich von anderen built-in Typen wie z.B. int oder dict erben David Robakowski Fachhochschule Wedel Python & PyDev
  • 79.
    Python OOP PyDev Fazit Klassen Klassen II Klassen haben in Python unterschiedliche Eigenschaften: Zugriff auf Instanzen durch die Punktnotation Es gibt static-, sowie class-Methoden gebundene und ungebundene Methoden Es lässt sich von anderen built-in Typen wie z.B. int oder dict erben Die Subklassenbeziehung ist transitiv David Robakowski Fachhochschule Wedel Python & PyDev
  • 80.
    Python OOP PyDev Fazit Klassen Klassen II Klassen haben in Python unterschiedliche Eigenschaften: Zugriff auf Instanzen durch die Punktnotation Es gibt static-, sowie class-Methoden gebundene und ungebundene Methoden Es lässt sich von anderen built-in Typen wie z.B. int oder dict erben Die Subklassenbeziehung ist transitiv if C2(C1) && C3(C2) => issubclass(C3, C1) == True David Robakowski Fachhochschule Wedel Python & PyDev
  • 81.
    Python OOP PyDev Fazit Klassen Klassen II Klassen haben in Python unterschiedliche Eigenschaften: Zugriff auf Instanzen durch die Punktnotation Es gibt static-, sowie class-Methoden gebundene und ungebundene Methoden Es lässt sich von anderen built-in Typen wie z.B. int oder dict erben Die Subklassenbeziehung ist transitiv if C2(C1) && C3(C2) => issubclass(C3, C1) == True David Robakowski Fachhochschule Wedel Python & PyDev
  • 82.
    Python OOP PyDev Fazit Klassen Klassen II Klassen haben in Python unterschiedliche Eigenschaften: Zugriff auf Instanzen durch die Punktnotation Es gibt static-, sowie class-Methoden gebundene und ungebundene Methoden Es lässt sich von anderen built-in Typen wie z.B. int oder dict erben Die Subklassenbeziehung ist transitiv if C2(C1) && C3(C2) => issubclass(C3, C1) == True siehe Beispiel: „ex_inherit_built_in_types_.py“ [4] David Robakowski Fachhochschule Wedel Python & PyDev
  • 83.
    Python OOP PyDev Fazit Klassen Attribute Alle Attribute werden in einem Dictionary __dict__ verwaltet David Robakowski Fachhochschule Wedel Python & PyDev
  • 84.
    Python OOP PyDev Fazit Klassen Attribute Alle Attribute werden in einem Dictionary __dict__ verwaltet Methoden werden auch als Attribute gehandhabt David Robakowski Fachhochschule Wedel Python & PyDev
  • 85.
    Python OOP PyDev Fazit Klassen Attribute Alle Attribute werden in einem Dictionary __dict__ verwaltet Methoden werden auch als Attribute gehandhabt David Robakowski Fachhochschule Wedel Python & PyDev
  • 86.
    Python OOP PyDev Fazit Klassen Attribute Alle Attribute werden in einem Dictionary __dict__ verwaltet Methoden werden auch als Attribute gehandhabt Bound an eine Instanz gebunden David Robakowski Fachhochschule Wedel Python & PyDev
  • 87.
    Python OOP PyDev Fazit Klassen Attribute Alle Attribute werden in einem Dictionary __dict__ verwaltet Methoden werden auch als Attribute gehandhabt Bound an eine Instanz gebunden David Robakowski Fachhochschule Wedel Python & PyDev
  • 88.
    Python OOP PyDev Fazit Klassen Attribute Alle Attribute werden in einem Dictionary __dict__ verwaltet Methoden werden auch als Attribute gehandhabt Bound an eine Instanz gebunden Unbound an eine Klasse gebunden David Robakowski Fachhochschule Wedel Python & PyDev
  • 89.
    Python OOP PyDev Fazit Klassen Attribute Alle Attribute werden in einem Dictionary __dict__ verwaltet Methoden werden auch als Attribute gehandhabt Bound an eine Instanz gebunden Unbound an eine Klasse gebunden Es lassen sich dynamisch Attribute hinzufügen, sowie löschen David Robakowski Fachhochschule Wedel Python & PyDev
  • 90.
    Python OOP PyDev Fazit Klassen Attribute Alle Attribute werden in einem Dictionary __dict__ verwaltet Methoden werden auch als Attribute gehandhabt Bound an eine Instanz gebunden Unbound an eine Klasse gebunden Es lassen sich dynamisch Attribute hinzufügen, sowie löschen Es gibt Klassen-/ und Instanz-Attribute David Robakowski Fachhochschule Wedel Python & PyDev
  • 91.
    Python OOP PyDev Fazit Klassen Attribute Alle Attribute werden in einem Dictionary __dict__ verwaltet Methoden werden auch als Attribute gehandhabt Bound an eine Instanz gebunden Unbound an eine Klasse gebunden Es lassen sich dynamisch Attribute hinzufügen, sowie löschen Es gibt Klassen-/ und Instanz-Attribute Es sind bereits implizit folgende Attribute vorhanden: David Robakowski Fachhochschule Wedel Python & PyDev
  • 92.
    Python OOP PyDev Fazit Klassen Attribute Alle Attribute werden in einem Dictionary __dict__ verwaltet Methoden werden auch als Attribute gehandhabt Bound an eine Instanz gebunden Unbound an eine Klasse gebunden Es lassen sich dynamisch Attribute hinzufügen, sowie löschen Es gibt Klassen-/ und Instanz-Attribute Es sind bereits implizit folgende Attribute vorhanden: David Robakowski Fachhochschule Wedel Python & PyDev
  • 93.
    Python OOP PyDev Fazit Klassen Attribute Alle Attribute werden in einem Dictionary __dict__ verwaltet Methoden werden auch als Attribute gehandhabt Bound an eine Instanz gebunden Unbound an eine Klasse gebunden Es lassen sich dynamisch Attribute hinzufügen, sowie löschen Es gibt Klassen-/ und Instanz-Attribute Es sind bereits implizit folgende Attribute vorhanden: __class__ Klassenobjekt zu dem die Instanz gehört David Robakowski Fachhochschule Wedel Python & PyDev
  • 94.
    Python OOP PyDev Fazit Klassen Attribute Alle Attribute werden in einem Dictionary __dict__ verwaltet Methoden werden auch als Attribute gehandhabt Bound an eine Instanz gebunden Unbound an eine Klasse gebunden Es lassen sich dynamisch Attribute hinzufügen, sowie löschen Es gibt Klassen-/ und Instanz-Attribute Es sind bereits implizit folgende Attribute vorhanden: __class__ Klassenobjekt zu dem die Instanz gehört David Robakowski Fachhochschule Wedel Python & PyDev
  • 95.
    Python OOP PyDev Fazit Klassen Attribute Alle Attribute werden in einem Dictionary __dict__ verwaltet Methoden werden auch als Attribute gehandhabt Bound an eine Instanz gebunden Unbound an eine Klasse gebunden Es lassen sich dynamisch Attribute hinzufügen, sowie löschen Es gibt Klassen-/ und Instanz-Attribute Es sind bereits implizit folgende Attribute vorhanden: __class__ Klassenobjekt zu dem die Instanz gehört __dict__ Dictionary für die Attribute David Robakowski Fachhochschule Wedel Python & PyDev
  • 96.
    Python OOP PyDev Fazit Klassen Attribute Alle Attribute werden in einem Dictionary __dict__ verwaltet Methoden werden auch als Attribute gehandhabt Bound an eine Instanz gebunden Unbound an eine Klasse gebunden Es lassen sich dynamisch Attribute hinzufügen, sowie löschen Es gibt Klassen-/ und Instanz-Attribute Es sind bereits implizit folgende Attribute vorhanden: __class__ Klassenobjekt zu dem die Instanz gehört __dict__ Dictionary für die Attribute David Robakowski Fachhochschule Wedel Python & PyDev
  • 97.
    Python OOP PyDev Fazit Klassen Attribute Alle Attribute werden in einem Dictionary __dict__ verwaltet Methoden werden auch als Attribute gehandhabt Bound an eine Instanz gebunden Unbound an eine Klasse gebunden Es lassen sich dynamisch Attribute hinzufügen, sowie löschen Es gibt Klassen-/ und Instanz-Attribute Es sind bereits implizit folgende Attribute vorhanden: __class__ Klassenobjekt zu dem die Instanz gehört __dict__ Dictionary für die Attribute __name__ Name der Klasse David Robakowski Fachhochschule Wedel Python & PyDev
  • 98.
    Python OOP PyDev Fazit Klassen Attribute Alle Attribute werden in einem Dictionary __dict__ verwaltet Methoden werden auch als Attribute gehandhabt Bound an eine Instanz gebunden Unbound an eine Klasse gebunden Es lassen sich dynamisch Attribute hinzufügen, sowie löschen Es gibt Klassen-/ und Instanz-Attribute Es sind bereits implizit folgende Attribute vorhanden: __class__ Klassenobjekt zu dem die Instanz gehört __dict__ Dictionary für die Attribute __name__ Name der Klasse David Robakowski Fachhochschule Wedel Python & PyDev
  • 99.
    Python OOP PyDev Fazit Klassen Attribute Alle Attribute werden in einem Dictionary __dict__ verwaltet Methoden werden auch als Attribute gehandhabt Bound an eine Instanz gebunden Unbound an eine Klasse gebunden Es lassen sich dynamisch Attribute hinzufügen, sowie löschen Es gibt Klassen-/ und Instanz-Attribute Es sind bereits implizit folgende Attribute vorhanden: __class__ Klassenobjekt zu dem die Instanz gehört __dict__ Dictionary für die Attribute __name__ Name der Klasse __bases__ Liste aller Basisklassen David Robakowski Fachhochschule Wedel Python & PyDev
  • 100.
    Python OOP PyDev Fazit Klassen Attribute Alle Attribute werden in einem Dictionary __dict__ verwaltet Methoden werden auch als Attribute gehandhabt Bound an eine Instanz gebunden Unbound an eine Klasse gebunden Es lassen sich dynamisch Attribute hinzufügen, sowie löschen Es gibt Klassen-/ und Instanz-Attribute Es sind bereits implizit folgende Attribute vorhanden: __class__ Klassenobjekt zu dem die Instanz gehört __dict__ Dictionary für die Attribute __name__ Name der Klasse __bases__ Liste aller Basisklassen David Robakowski Fachhochschule Wedel Python & PyDev
  • 101.
    Python OOP PyDev Fazit Klassen Attribute Alle Attribute werden in einem Dictionary __dict__ verwaltet Methoden werden auch als Attribute gehandhabt Bound an eine Instanz gebunden Unbound an eine Klasse gebunden Es lassen sich dynamisch Attribute hinzufügen, sowie löschen Es gibt Klassen-/ und Instanz-Attribute Es sind bereits implizit folgende Attribute vorhanden: __class__ Klassenobjekt zu dem die Instanz gehört __dict__ Dictionary für die Attribute __name__ Name der Klasse __bases__ Liste aller Basisklassen __doc__ Beinhaltet den „Doc-String“ David Robakowski Fachhochschule Wedel Python & PyDev
  • 102.
    Python OOP PyDev Fazit Klassen Attribute Alle Attribute werden in einem Dictionary __dict__ verwaltet Methoden werden auch als Attribute gehandhabt Bound an eine Instanz gebunden Unbound an eine Klasse gebunden Es lassen sich dynamisch Attribute hinzufügen, sowie löschen Es gibt Klassen-/ und Instanz-Attribute Es sind bereits implizit folgende Attribute vorhanden: __class__ Klassenobjekt zu dem die Instanz gehört __dict__ Dictionary für die Attribute __name__ Name der Klasse __bases__ Liste aller Basisklassen __doc__ Beinhaltet den „Doc-String“ David Robakowski Fachhochschule Wedel Python & PyDev
  • 103.
    Python OOP PyDev Fazit Klassen Attribute Alle Attribute werden in einem Dictionary __dict__ verwaltet Methoden werden auch als Attribute gehandhabt Bound an eine Instanz gebunden Unbound an eine Klasse gebunden Es lassen sich dynamisch Attribute hinzufügen, sowie löschen Es gibt Klassen-/ und Instanz-Attribute Es sind bereits implizit folgende Attribute vorhanden: __class__ Klassenobjekt zu dem die Instanz gehört __dict__ Dictionary für die Attribute __name__ Name der Klasse __bases__ Liste aller Basisklassen __doc__ Beinhaltet den „Doc-String“ siehe Beispiel: „ex_attributes.py“ [4] David Robakowski Fachhochschule Wedel Python & PyDev
  • 104.
    Python OOP PyDev Fazit Klassen Kapselung von Attributen Python ermöglicht keine „richtige“ Datenkapselung, es handelt sich eher um Konventionen David Robakowski Fachhochschule Wedel Python & PyDev
  • 105.
    Python OOP PyDev Fazit Klassen Kapselung von Attributen Python ermöglicht keine „richtige“ Datenkapselung, es handelt sich eher um Konventionen Folgende Konventionen sollten eingehalten werden: David Robakowski Fachhochschule Wedel Python & PyDev
  • 106.
    Python OOP PyDev Fazit Klassen Kapselung von Attributen Python ermöglicht keine „richtige“ Datenkapselung, es handelt sich eher um Konventionen Folgende Konventionen sollten eingehalten werden: David Robakowski Fachhochschule Wedel Python & PyDev
  • 107.
    Python OOP PyDev Fazit Klassen Kapselung von Attributen Python ermöglicht keine „richtige“ Datenkapselung, es handelt sich eher um Konventionen Folgende Konventionen sollten eingehalten werden: public: Per Default alle Attribute David Robakowski Fachhochschule Wedel Python & PyDev
  • 108.
    Python OOP PyDev Fazit Klassen Kapselung von Attributen Python ermöglicht keine „richtige“ Datenkapselung, es handelt sich eher um Konventionen Folgende Konventionen sollten eingehalten werden: public: Per Default alle Attribute David Robakowski Fachhochschule Wedel Python & PyDev
  • 109.
    Python OOP PyDev Fazit Klassen Kapselung von Attributen Python ermöglicht keine „richtige“ Datenkapselung, es handelt sich eher um Konventionen Folgende Konventionen sollten eingehalten werden: public: Per Default alle Attribute protected / weak: Einfaches „_“ Zeichen leitet protected ein, also z.B. _name Werden nicht in den Namensraum eingebunden, sind jedoch über den Namen erreichbar David Robakowski Fachhochschule Wedel Python & PyDev
  • 110.
    Python OOP PyDev Fazit Klassen Kapselung von Attributen Python ermöglicht keine „richtige“ Datenkapselung, es handelt sich eher um Konventionen Folgende Konventionen sollten eingehalten werden: public: Per Default alle Attribute protected / weak: Einfaches „_“ Zeichen leitet protected ein, also z.B. _name Werden nicht in den Namensraum eingebunden, sind jedoch über den Namen erreichbar David Robakowski Fachhochschule Wedel Python & PyDev
  • 111.
    Python OOP PyDev Fazit Klassen Kapselung von Attributen Python ermöglicht keine „richtige“ Datenkapselung, es handelt sich eher um Konventionen Folgende Konventionen sollten eingehalten werden: public: Per Default alle Attribute protected / weak: Einfaches „_“ Zeichen leitet protected ein, also z.B. _name Werden nicht in den Namensraum eingebunden, sind jedoch über den Namen erreichbar private / strong: Doppelte „_“ Zeichen leiten private ein, also z.B. __name Werden vom Interpreter in _ClassName__name umbenannt David Robakowski Fachhochschule Wedel Python & PyDev
  • 112.
    Python OOP PyDev Fazit Klassen Kapselung von Attributen Python ermöglicht keine „richtige“ Datenkapselung, es handelt sich eher um Konventionen Folgende Konventionen sollten eingehalten werden: public: Per Default alle Attribute protected / weak: Einfaches „_“ Zeichen leitet protected ein, also z.B. _name Werden nicht in den Namensraum eingebunden, sind jedoch über den Namen erreichbar private / strong: Doppelte „_“ Zeichen leiten private ein, also z.B. __name Werden vom Interpreter in _ClassName__name umbenannt David Robakowski Fachhochschule Wedel Python & PyDev
  • 113.
    Python OOP PyDev Fazit Klassen Kapselung von Attributen Python ermöglicht keine „richtige“ Datenkapselung, es handelt sich eher um Konventionen Folgende Konventionen sollten eingehalten werden: public: Per Default alle Attribute protected / weak: Einfaches „_“ Zeichen leitet protected ein, also z.B. _name Werden nicht in den Namensraum eingebunden, sind jedoch über den Namen erreichbar private / strong: Doppelte „_“ Zeichen leiten private ein, also z.B. __name Werden vom Interpreter in _ClassName__name umbenannt siehe Beispiel: „ex_encapsulation.py“ [4] David Robakowski Fachhochschule Wedel Python & PyDev
  • 114.
    Python OOP PyDev Fazit Klassen Deskriptoren Spezielle new-style Objekte, dessen Klasse eine Methode __get__ implementiert David Robakowski Fachhochschule Wedel Python & PyDev
  • 115.
    Python OOP PyDev Fazit Klassen Deskriptoren Spezielle new-style Objekte, dessen Klasse eine Methode __get__ implementiert Übernehmen als Klassenattribut die Zugriffsteuerung auf diese Instanz David Robakowski Fachhochschule Wedel Python & PyDev
  • 116.
    Python OOP PyDev Fazit Klassen Deskriptoren Spezielle new-style Objekte, dessen Klasse eine Methode __get__ implementiert Übernehmen als Klassenattribut die Zugriffsteuerung auf diese Instanz Unterteilt in: David Robakowski Fachhochschule Wedel Python & PyDev
  • 117.
    Python OOP PyDev Fazit Klassen Deskriptoren Spezielle new-style Objekte, dessen Klasse eine Methode __get__ implementiert Übernehmen als Klassenattribut die Zugriffsteuerung auf diese Instanz Unterteilt in: David Robakowski Fachhochschule Wedel Python & PyDev
  • 118.
    Python OOP PyDev Fazit Klassen Deskriptoren Spezielle new-style Objekte, dessen Klasse eine Methode __get__ implementiert Übernehmen als Klassenattribut die Zugriffsteuerung auf diese Instanz Unterteilt in: overriding descriptor implementieren zusätzlich die __set__ Methode Auch Daten-Deskriptor genannt David Robakowski Fachhochschule Wedel Python & PyDev
  • 119.
    Python OOP PyDev Fazit Klassen Deskriptoren Spezielle new-style Objekte, dessen Klasse eine Methode __get__ implementiert Übernehmen als Klassenattribut die Zugriffsteuerung auf diese Instanz Unterteilt in: overriding descriptor implementieren zusätzlich die __set__ Methode Auch Daten-Deskriptor genannt David Robakowski Fachhochschule Wedel Python & PyDev
  • 120.
    Python OOP PyDev Fazit Klassen Deskriptoren Spezielle new-style Objekte, dessen Klasse eine Methode __get__ implementiert Übernehmen als Klassenattribut die Zugriffsteuerung auf diese Instanz Unterteilt in: overriding descriptor implementieren zusätzlich die __set__ Methode Auch Daten-Deskriptor genannt non-overriding descriptor z.B. Funktionsobjekte David Robakowski Fachhochschule Wedel Python & PyDev
  • 121.
    Python OOP PyDev Fazit Klassen Deskriptoren Spezielle new-style Objekte, dessen Klasse eine Methode __get__ implementiert Übernehmen als Klassenattribut die Zugriffsteuerung auf diese Instanz Unterteilt in: overriding descriptor implementieren zusätzlich die __set__ Methode Auch Daten-Deskriptor genannt non-overriding descriptor z.B. Funktionsobjekte Finden Anwendung bei Funktionen, Eigenschaften, super(), Statische-, Klassenmethoden und sogar bei Klassen David Robakowski Fachhochschule Wedel Python & PyDev
  • 122.
    Python OOP PyDev Fazit Klassen Deskriptoren Spezielle new-style Objekte, dessen Klasse eine Methode __get__ implementiert Übernehmen als Klassenattribut die Zugriffsteuerung auf diese Instanz Unterteilt in: overriding descriptor implementieren zusätzlich die __set__ Methode Auch Daten-Deskriptor genannt non-overriding descriptor z.B. Funktionsobjekte Finden Anwendung bei Funktionen, Eigenschaften, super(), Statische-, Klassenmethoden und sogar bei Klassen David Robakowski Fachhochschule Wedel Python & PyDev
  • 123.
    Python OOP PyDev Fazit Klassen Deskriptoren Spezielle new-style Objekte, dessen Klasse eine Methode __get__ implementiert Übernehmen als Klassenattribut die Zugriffsteuerung auf diese Instanz Unterteilt in: overriding descriptor implementieren zusätzlich die __set__ Methode Auch Daten-Deskriptor genannt non-overriding descriptor z.B. Funktionsobjekte Finden Anwendung bei Funktionen, Eigenschaften, super(), Statische-, Klassenmethoden und sogar bei Klassen siehe Beispiel: „ex_descriptors.py“ [4] David Robakowski Fachhochschule Wedel Python & PyDev
  • 124.
    Python OOP PyDev Fazit Klassen Funktionen und Methoden Das erste Argument enthält die Objektinstanz David Robakowski Fachhochschule Wedel Python & PyDev
  • 125.
    Python OOP PyDev Fazit Klassen Funktionen und Methoden Das erste Argument enthält die Objektinstanz Per Konvention self genannt David Robakowski Fachhochschule Wedel Python & PyDev
  • 126.
    Python OOP PyDev Fazit Klassen Funktionen und Methoden Das erste Argument enthält die Objektinstanz Per Konvention self genannt Eine Klasse kann spezielle Methoden enthalten, welche die Form __xxx__ haben David Robakowski Fachhochschule Wedel Python & PyDev
  • 127.
    Python OOP PyDev Fazit Klassen Funktionen und Methoden Das erste Argument enthält die Objektinstanz Per Konvention self genannt Eine Klasse kann spezielle Methoden enthalten, welche die Form __xxx__ haben Um den Aufruf als Methode zu unterstützen, enthalten Funktionen die __get__ Methode David Robakowski Fachhochschule Wedel Python & PyDev
  • 128.
    Python OOP PyDev Fazit Klassen Funktionen und Methoden Das erste Argument enthält die Objektinstanz Per Konvention self genannt Eine Klasse kann spezielle Methoden enthalten, welche die Form __xxx__ haben Um den Aufruf als Methode zu unterstützen, enthalten Funktionen die __get__ Methode Alle Funktionen stellen non-overriding Deskriptoren dar, die gebundene oder ungebundene Methoden zurückgeben David Robakowski Fachhochschule Wedel Python & PyDev
  • 129.
    Python OOP PyDev Fazit Klassen Funktionen und Methoden Das erste Argument enthält die Objektinstanz Per Konvention self genannt Eine Klasse kann spezielle Methoden enthalten, welche die Form __xxx__ haben Um den Aufruf als Methode zu unterstützen, enthalten Funktionen die __get__ Methode Alle Funktionen stellen non-overriding Deskriptoren dar, die gebundene oder ungebundene Methoden zurückgeben David Robakowski Fachhochschule Wedel Python & PyDev
  • 130.
    Python OOP PyDev Fazit Klassen Funktionen und Methoden Das erste Argument enthält die Objektinstanz Per Konvention self genannt Eine Klasse kann spezielle Methoden enthalten, welche die Form __xxx__ haben Um den Aufruf als Methode zu unterstützen, enthalten Funktionen die __get__ Methode Alle Funktionen stellen non-overriding Deskriptoren dar, die gebundene oder ungebundene Methoden zurückgeben siehe Beispiel: „ex_descriptors.py“ [4] David Robakowski Fachhochschule Wedel Python & PyDev
  • 131.
    Python OOP PyDev Fazit Klassen Properties, Statische und Klassenmethoden Werden über Deskriptoren realisiert David Robakowski Fachhochschule Wedel Python & PyDev
  • 132.
    Python OOP PyDev Fazit Klassen Properties, Statische und Klassenmethoden Werden über Deskriptoren realisiert Werden an Klassenattribute gebunden David Robakowski Fachhochschule Wedel Python & PyDev
  • 133.
    Python OOP PyDev Fazit Klassen Properties, Statische und Klassenmethoden Werden über Deskriptoren realisiert Werden an Klassenattribute gebunden David Robakowski Fachhochschule Wedel Python & PyDev
  • 134.
    Python OOP PyDev Fazit Klassen Properties, Statische und Klassenmethoden Werden über Deskriptoren realisiert Werden an Klassenattribute gebunden property Data-Deskriptor property(fget=None, fset=None, fdel=None, doc=None) Read-only einfach möglich durch Nichtsetzen von fset Vorteile, keine Statements wie c.setCnt(c.getCnt( ) + 1) David Robakowski Fachhochschule Wedel Python & PyDev
  • 135.
    Python OOP PyDev Fazit Klassen Properties, Statische und Klassenmethoden Werden über Deskriptoren realisiert Werden an Klassenattribute gebunden property Data-Deskriptor property(fget=None, fset=None, fdel=None, doc=None) Read-only einfach möglich durch Nichtsetzen von fset Vorteile, keine Statements wie c.setCnt(c.getCnt( ) + 1) David Robakowski Fachhochschule Wedel Python & PyDev
  • 136.
    Python OOP PyDev Fazit Klassen Properties, Statische und Klassenmethoden Werden über Deskriptoren realisiert Werden an Klassenattribute gebunden property Data-Deskriptor property(fget=None, fset=None, fdel=None, doc=None) Read-only einfach möglich durch Nichtsetzen von fset Vorteile, keine Statements wie c.setCnt(c.getCnt( ) + 1) staticmethod non-overriding Deskriptor In Java vergleichbar mit static Gibt zu Grunde liegende Funktion ohne Änderung zurück staticmethod(f) David Robakowski Fachhochschule Wedel Python & PyDev
  • 137.
    Python OOP PyDev Fazit Klassen Properties, Statische und Klassenmethoden II David Robakowski Fachhochschule Wedel Python & PyDev
  • 138.
    Python OOP PyDev Fazit Klassen Properties, Statische und Klassenmethoden II classmethod non-overriding Deskriptor Erstes Argument wird an das Klassenobjekt gebunden Per Konvention cls genannt Kann durch Instanz- oder Klassenobjekt aufgerufen werden classmethod(f) David Robakowski Fachhochschule Wedel Python & PyDev
  • 139.
    Python OOP PyDev Fazit Klassen Properties, Statische und Klassenmethoden II classmethod non-overriding Deskriptor Erstes Argument wird an das Klassenobjekt gebunden Per Konvention cls genannt Kann durch Instanz- oder Klassenobjekt aufgerufen werden classmethod(f) David Robakowski Fachhochschule Wedel Python & PyDev
  • 140.
    Python OOP PyDev Fazit Klassen Properties, Statische und Klassenmethoden II classmethod non-overriding Deskriptor Erstes Argument wird an das Klassenobjekt gebunden Per Konvention cls genannt Kann durch Instanz- oder Klassenobjekt aufgerufen werden classmethod(f) siehe Beispiel: „ex_properties_class-level.py“ [4] David Robakowski Fachhochschule Wedel Python & PyDev
  • 141.
    Python OOP PyDev Fazit Vererbung Gliederung 1 Python 2 OOP Geschichte Objektsystem Eigenschaften Klassen Sprachumfang Vererbung Paradigmen Metaklassen Einsatzgebiete 3 PyDev Vor- und Nachteile Zu PyDev 4 Fazit Mein Fazit David Robakowski Fachhochschule Wedel Python & PyDev
  • 142.
    Python OOP PyDev Fazit Vererbung Method Resolution Order Vererbung, sowie Mehrfachvererbung werden unterstützt David Robakowski Fachhochschule Wedel Python & PyDev
  • 143.
    Python OOP PyDev Fazit Vererbung Method Resolution Order Vererbung, sowie Mehrfachvererbung werden unterstützt class Name(bases, ...) David Robakowski Fachhochschule Wedel Python & PyDev
  • 144.
    Python OOP PyDev Fazit Vererbung Method Resolution Order Vererbung, sowie Mehrfachvererbung werden unterstützt class Name(bases, ...) Es lassen sich Methoden, sowie Attribute überschreiben David Robakowski Fachhochschule Wedel Python & PyDev
  • 145.
    Python OOP PyDev Fazit Vererbung Method Resolution Order Vererbung, sowie Mehrfachvererbung werden unterstützt class Name(bases, ...) Es lassen sich Methoden, sowie Attribute überschreiben Durch die Mehrfachvererbung entsteht die Frage nach MRO David Robakowski Fachhochschule Wedel Python & PyDev
  • 146.
    Python OOP PyDev Fazit Vererbung Method Resolution Order Vererbung, sowie Mehrfachvererbung werden unterstützt class Name(bases, ...) Es lassen sich Methoden, sowie Attribute überschreiben Durch die Mehrfachvererbung entsteht die Frage nach MRO Standardmäßig werden Attribute, Methoden in __dict__ von links nach rechts gesucht David Robakowski Fachhochschule Wedel Python & PyDev
  • 147.
    Python OOP PyDev Fazit Vererbung Method Resolution Order Vererbung, sowie Mehrfachvererbung werden unterstützt class Name(bases, ...) Es lassen sich Methoden, sowie Attribute überschreiben Durch die Mehrfachvererbung entsteht die Frage nach MRO Standardmäßig werden Attribute, Methoden in __dict__ von links nach rechts gesucht Wenn Schlüssel nicht gefunden wird, wird die Suche auf __bases__ fortgeführt David Robakowski Fachhochschule Wedel Python & PyDev
  • 148.
    Python OOP PyDev Fazit Vererbung Method Resolution Order Vererbung, sowie Mehrfachvererbung werden unterstützt class Name(bases, ...) Es lassen sich Methoden, sowie Attribute überschreiben Durch die Mehrfachvererbung entsteht die Frage nach MRO Standardmäßig werden Attribute, Methoden in __dict__ von links nach rechts gesucht Wenn Schlüssel nicht gefunden wird, wird die Suche auf __bases__ fortgeführt Unterschiedlich in old-style und new-style David Robakowski Fachhochschule Wedel Python & PyDev
  • 149.
    Python OOP PyDev Fazit Vererbung Method Resolution Order - classic Figure 5-1 [1] Links nach rechts, tiefenorientiertes Suchverfahren David Robakowski Fachhochschule Wedel Python & PyDev
  • 150.
    Python OOP PyDev Fazit Vererbung Method Resolution Order - classic Figure 5-1 [1] Links nach rechts, tiefenorientiertes Suchverfahren Führt zu Problemen bei Diamantstrukturen David Robakowski Fachhochschule Wedel Python & PyDev
  • 151.
    Python OOP PyDev Fazit Vererbung Method Resolution Order - classic Figure 5-1 [1] Links nach rechts, tiefenorientiertes Suchverfahren Führt zu Problemen bei Diamantstrukturen Reihenfolge: A, B, D, C, D David Robakowski Fachhochschule Wedel Python & PyDev
  • 152.
    Python OOP PyDev Fazit Vererbung Method Resolution Order - new-style Figure 5-1 [1] Löst das Problem durch Löschen von doppelten Einträgen in der Liste David Robakowski Fachhochschule Wedel Python & PyDev
  • 153.
    Python OOP PyDev Fazit Vererbung Method Resolution Order - new-style Figure 5-1 [1] Löst das Problem durch Löschen von doppelten Einträgen in der Liste Gelöscht wird von rechts nach links, also neue Reihenfolge: A, B, C, D, object David Robakowski Fachhochschule Wedel Python & PyDev
  • 154.
    Python OOP PyDev Fazit Vererbung Method Resolution Order - new-style Figure 5-1 [1] Löst das Problem durch Löschen von doppelten Einträgen in der Liste Gelöscht wird von rechts nach links, also neue Reihenfolge: A, B, C, D, object Spezialisierungen werden priorisiert David Robakowski Fachhochschule Wedel Python & PyDev
  • 155.
    Python OOP PyDev Fazit Vererbung Method Resolution Order - new-style Figure 5-1 [1] Löst das Problem durch Löschen von doppelten Einträgen in der Liste Gelöscht wird von rechts nach links, also neue Reihenfolge: A, B, C, D, object Spezialisierungen werden priorisiert In new-style Klassen ist immer ein __mro__ vorhanden David Robakowski Fachhochschule Wedel Python & PyDev
  • 156.
    Python OOP PyDev Fazit Vererbung Method Resolution Order - new-style Figure 5-1 [1] Löst das Problem durch Löschen von doppelten Einträgen in der Liste Gelöscht wird von rechts nach links, also neue Reihenfolge: A, B, C, D, object Spezialisierungen werden priorisiert In new-style Klassen ist immer ein __mro__ vorhanden Ab Version 2.3 auf C3 Algorithmus umgestellt David Robakowski Fachhochschule Wedel Python & PyDev
  • 157.
    Python OOP PyDev Fazit Superclass calls Kooperative superclass calls Möglich durch ungebundenen super Aufruf: ClassName.__init__(self, ...) David Robakowski Fachhochschule Wedel Python & PyDev
  • 158.
    Python OOP PyDev Fazit Superclass calls Kooperative superclass calls Möglich durch ungebundenen super Aufruf: ClassName.__init__(self, ...) Problematisch bei Diamantstrukturen David Robakowski Fachhochschule Wedel Python & PyDev
  • 159.
    Python OOP PyDev Fazit Superclass calls Kooperative superclass calls Möglich durch ungebundenen super Aufruf: ClassName.__init__(self, ...) Problematisch bei Diamantstrukturen Im besten Fall ineffizient David Robakowski Fachhochschule Wedel Python & PyDev
  • 160.
    Python OOP PyDev Fazit Superclass calls Kooperative superclass calls Möglich durch ungebundenen super Aufruf: ClassName.__init__(self, ...) Problematisch bei Diamantstrukturen Im besten Fall ineffizient Im schlimmsten Fall ein Fehler David Robakowski Fachhochschule Wedel Python & PyDev
  • 161.
    Python OOP PyDev Fazit Superclass calls Kooperative superclass calls Möglich durch ungebundenen super Aufruf: ClassName.__init__(self, ...) Problematisch bei Diamantstrukturen Im besten Fall ineffizient Im schlimmsten Fall ein Fehler Abhilfe schafft super(AClass, obj) David Robakowski Fachhochschule Wedel Python & PyDev
  • 162.
    Python OOP PyDev Fazit Superclass calls Kooperative superclass calls Möglich durch ungebundenen super Aufruf: ClassName.__init__(self, ...) Problematisch bei Diamantstrukturen Im besten Fall ineffizient Im schlimmsten Fall ein Fehler Abhilfe schafft super(AClass, obj) Mächtiger als z.B. in Java David Robakowski Fachhochschule Wedel Python & PyDev
  • 163.
    Python OOP PyDev Fazit Superclass calls Kooperative superclass calls Möglich durch ungebundenen super Aufruf: ClassName.__init__(self, ...) Problematisch bei Diamantstrukturen Im besten Fall ineffizient Im schlimmsten Fall ein Fehler Abhilfe schafft super(AClass, obj) Mächtiger als z.B. in Java Analysiert und iteriert über obj.__class__.__mro__ David Robakowski Fachhochschule Wedel Python & PyDev
  • 164.
    Python OOP PyDev Fazit Superclass calls Kooperative superclass calls Möglich durch ungebundenen super Aufruf: ClassName.__init__(self, ...) Problematisch bei Diamantstrukturen Im besten Fall ineffizient Im schlimmsten Fall ein Fehler Abhilfe schafft super(AClass, obj) Mächtiger als z.B. in Java Analysiert und iteriert über obj.__class__.__mro__ super sollte bevorzugt werden David Robakowski Fachhochschule Wedel Python & PyDev
  • 165.
    Python OOP PyDev Fazit Superclass calls Kooperative superclass calls Möglich durch ungebundenen super Aufruf: ClassName.__init__(self, ...) Problematisch bei Diamantstrukturen Im besten Fall ineffizient Im schlimmsten Fall ein Fehler Abhilfe schafft super(AClass, obj) Mächtiger als z.B. in Java Analysiert und iteriert über obj.__class__.__mro__ super sollte bevorzugt werden Bei unterschiedlichen Methodensignaturen evtl. besser Superklassen-Aufruf durch ungebundene Variante David Robakowski Fachhochschule Wedel Python & PyDev
  • 166.
    Python OOP PyDev Fazit Superclass calls Kooperative superclass calls Möglich durch ungebundenen super Aufruf: ClassName.__init__(self, ...) Problematisch bei Diamantstrukturen Im besten Fall ineffizient Im schlimmsten Fall ein Fehler Abhilfe schafft super(AClass, obj) Mächtiger als z.B. in Java Analysiert und iteriert über obj.__class__.__mro__ super sollte bevorzugt werden Bei unterschiedlichen Methodensignaturen evtl. besser Superklassen-Aufruf durch ungebundene Variante David Robakowski Fachhochschule Wedel Python & PyDev
  • 167.
    Python OOP PyDev Fazit Superclass calls Kooperative superclass calls Möglich durch ungebundenen super Aufruf: ClassName.__init__(self, ...) Problematisch bei Diamantstrukturen Im besten Fall ineffizient Im schlimmsten Fall ein Fehler Abhilfe schafft super(AClass, obj) Mächtiger als z.B. in Java Analysiert und iteriert über obj.__class__.__mro__ super sollte bevorzugt werden Bei unterschiedlichen Methodensignaturen evtl. besser Superklassen-Aufruf durch ungebundene Variante siehe Beispiel: „ex_superclass.py“ [4] David Robakowski Fachhochschule Wedel Python & PyDev
  • 168.
    Python OOP PyDev Fazit Spezielle Methoden Spezielle Methoden Auch genannt als „magic-methods“ David Robakowski Fachhochschule Wedel Python & PyDev
  • 169.
    Python OOP PyDev Fazit Spezielle Methoden Spezielle Methoden Auch genannt als „magic-methods“ Wird implizit durch Python für jeden möglichen Zugriff auf eine Instanz ausgeführt David Robakowski Fachhochschule Wedel Python & PyDev
  • 170.
    Python OOP PyDev Fazit Spezielle Methoden Spezielle Methoden Auch genannt als „magic-methods“ Wird implizit durch Python für jeden möglichen Zugriff auf eine Instanz ausgeführt David Robakowski Fachhochschule Wedel Python & PyDev
  • 171.
    Python OOP PyDev Fazit Spezielle Methoden Spezielle Methoden Auch genannt als „magic-methods“ Wird implizit durch Python für jeden möglichen Zugriff auf eine Instanz ausgeführt Verschiedene Kategorien: David Robakowski Fachhochschule Wedel Python & PyDev
  • 172.
    Python OOP PyDev Fazit Spezielle Methoden Spezielle Methoden Auch genannt als „magic-methods“ Wird implizit durch Python für jeden möglichen Zugriff auf eine Instanz ausgeführt Verschiedene Kategorien: Initialisierung und Finalisierung: __new__, __init__, __del__ David Robakowski Fachhochschule Wedel Python & PyDev
  • 173.
    Python OOP PyDev Fazit Spezielle Methoden Spezielle Methoden Auch genannt als „magic-methods“ Wird implizit durch Python für jeden möglichen Zugriff auf eine Instanz ausgeführt Verschiedene Kategorien: Initialisierung und Finalisierung: __new__, __init__, __del__ Repräsentation als String: __rep__, __str__, __unicode__ David Robakowski Fachhochschule Wedel Python & PyDev
  • 174.
    Python OOP PyDev Fazit Spezielle Methoden Spezielle Methoden Auch genannt als „magic-methods“ Wird implizit durch Python für jeden möglichen Zugriff auf eine Instanz ausgeführt Verschiedene Kategorien: Initialisierung und Finalisierung: __new__, __init__, __del__ Repräsentation als String: __rep__, __str__, __unicode__ Vergleiche, Hashing, Boolean-Kontext: __lt__, __le__, __gt__, __ge__, __eq__, __ne__, __cmp__, __hash__ David Robakowski Fachhochschule Wedel Python & PyDev
  • 175.
    Python OOP PyDev Fazit Spezielle Methoden Spezielle Methoden Auch genannt als „magic-methods“ Wird implizit durch Python für jeden möglichen Zugriff auf eine Instanz ausgeführt Verschiedene Kategorien: Initialisierung und Finalisierung: __new__, __init__, __del__ Repräsentation als String: __rep__, __str__, __unicode__ Vergleiche, Hashing, Boolean-Kontext: __lt__, __le__, __gt__, __ge__, __eq__, __ne__, __cmp__, __hash__ Referenzierung: __getattribute__, __getattr__, __setattr__, __delattr__ David Robakowski Fachhochschule Wedel Python & PyDev
  • 176.
    Python OOP PyDev Fazit Spezielle Methoden Spezielle Methoden Auch genannt als „magic-methods“ Wird implizit durch Python für jeden möglichen Zugriff auf eine Instanz ausgeführt Verschiedene Kategorien: Initialisierung und Finalisierung: __new__, __init__, __del__ Repräsentation als String: __rep__, __str__, __unicode__ Vergleiche, Hashing, Boolean-Kontext: __lt__, __le__, __gt__, __ge__, __eq__, __ne__, __cmp__, __hash__ Referenzierung: __getattribute__, __getattr__, __setattr__, __delattr__ Aufrufbare Instanzen: __callable__ David Robakowski Fachhochschule Wedel Python & PyDev
  • 177.
    Python OOP PyDev Fazit Spezielle Methoden Spezielle Methoden Auch genannt als „magic-methods“ Wird implizit durch Python für jeden möglichen Zugriff auf eine Instanz ausgeführt Verschiedene Kategorien: Initialisierung und Finalisierung: __new__, __init__, __del__ Repräsentation als String: __rep__, __str__, __unicode__ Vergleiche, Hashing, Boolean-Kontext: __lt__, __le__, __gt__, __ge__, __eq__, __ne__, __cmp__, __hash__ Referenzierung: __getattribute__, __getattr__, __setattr__, __delattr__ Aufrufbare Instanzen: __callable__ David Robakowski Fachhochschule Wedel Python & PyDev
  • 178.
    Python OOP PyDev Fazit Spezielle Methoden Spezielle Methoden Auch genannt als „magic-methods“ Wird implizit durch Python für jeden möglichen Zugriff auf eine Instanz ausgeführt Verschiedene Kategorien: Initialisierung und Finalisierung: __new__, __init__, __del__ Repräsentation als String: __rep__, __str__, __unicode__ Vergleiche, Hashing, Boolean-Kontext: __lt__, __le__, __gt__, __ge__, __eq__, __ne__, __cmp__, __hash__ Referenzierung: __getattribute__, __getattr__, __setattr__, __delattr__ Aufrufbare Instanzen: __callable__ siehe Beispiel: „ex_specialmethods.py“ [4] David Robakowski Fachhochschule Wedel Python & PyDev
  • 179.
    Python OOP PyDev Fazit Dekoratoren Dekoratoren Schaffen mehr Übersicht, also mehr „code readability“ David Robakowski Fachhochschule Wedel Python & PyDev
  • 180.
    Python OOP PyDev Fazit Dekoratoren Dekoratoren Schaffen mehr Übersicht, also mehr „code readability“ Wird definiert durch @expression, direkt gefolgt von einem def-Statement David Robakowski Fachhochschule Wedel Python & PyDev
  • 181.
    Python OOP PyDev Fazit Dekoratoren Dekoratoren Schaffen mehr Übersicht, also mehr „code readability“ Wird definiert durch @expression, direkt gefolgt von einem def-Statement Häufigste Anwendung @classmethod, @staticmethod David Robakowski Fachhochschule Wedel Python & PyDev
  • 182.
    Python OOP PyDev Fazit Dekoratoren Dekoratoren Schaffen mehr Übersicht, also mehr „code readability“ Wird definiert durch @expression, direkt gefolgt von einem def-Statement Häufigste Anwendung @classmethod, @staticmethod Es lassen sich auch eigene Dekoratoren implementieren, welche als höher geordnete Funktion ausgeführt wird David Robakowski Fachhochschule Wedel Python & PyDev
  • 183.
    Python OOP PyDev Fazit Dekoratoren Dekoratoren Schaffen mehr Übersicht, also mehr „code readability“ Wird definiert durch @expression, direkt gefolgt von einem def-Statement Häufigste Anwendung @classmethod, @staticmethod Es lassen sich auch eigene Dekoratoren implementieren, welche als höher geordnete Funktion ausgeführt wird Die Dekoratoren verarbeiten die Funktion in der Initialisierungsphase David Robakowski Fachhochschule Wedel Python & PyDev
  • 184.
    Python OOP PyDev Fazit Dekoratoren Dekoratoren Schaffen mehr Übersicht, also mehr „code readability“ Wird definiert durch @expression, direkt gefolgt von einem def-Statement Häufigste Anwendung @classmethod, @staticmethod Es lassen sich auch eigene Dekoratoren implementieren, welche als höher geordnete Funktion ausgeführt wird Die Dekoratoren verarbeiten die Funktion in der Initialisierungsphase David Robakowski Fachhochschule Wedel Python & PyDev
  • 185.
    Python OOP PyDev Fazit Dekoratoren Dekoratoren Schaffen mehr Übersicht, also mehr „code readability“ Wird definiert durch @expression, direkt gefolgt von einem def-Statement Häufigste Anwendung @classmethod, @staticmethod Es lassen sich auch eigene Dekoratoren implementieren, welche als höher geordnete Funktion ausgeführt wird Die Dekoratoren verarbeiten die Funktion in der Initialisierungsphase siehe Beispiel: „ex_decorators.py“ [4] David Robakowski Fachhochschule Wedel Python & PyDev
  • 186.
    Python OOP PyDev Fazit Metaklassen Gliederung 1 Python 2 OOP Geschichte Objektsystem Eigenschaften Klassen Sprachumfang Vererbung Paradigmen Metaklassen Einsatzgebiete 3 PyDev Vor- und Nachteile Zu PyDev 4 Fazit Mein Fazit David Robakowski Fachhochschule Wedel Python & PyDev
  • 187.
    Python OOP PyDev Fazit Metaklassen Metaklassen In Python haben alle Objekte einen Typ David Robakowski Fachhochschule Wedel Python & PyDev
  • 188.
    Python OOP PyDev Fazit Metaklassen Metaklassen In Python haben alle Objekte einen Typ Der Typ eines Klassen-Objektes wird auch als die zur Klasse gehörige Metaklasse bezeichnet David Robakowski Fachhochschule Wedel Python & PyDev
  • 189.
    Python OOP PyDev Fazit Metaklassen Metaklassen In Python haben alle Objekte einen Typ Der Typ eines Klassen-Objektes wird auch als die zur Klasse gehörige Metaklasse bezeichnet Die Semantik einer Klasse hängt von der zugehörigen Metaklasse ab David Robakowski Fachhochschule Wedel Python & PyDev
  • 190.
    Python OOP PyDev Fazit Metaklassen Metaklassen In Python haben alle Objekte einen Typ Der Typ eines Klassen-Objektes wird auch als die zur Klasse gehörige Metaklasse bezeichnet Die Semantik einer Klasse hängt von der zugehörigen Metaklasse ab Der Typ einer new-style Klasse ist type David Robakowski Fachhochschule Wedel Python & PyDev
  • 191.
    Python OOP PyDev Fazit Metaklassen Metaklassen In Python haben alle Objekte einen Typ Der Typ eines Klassen-Objektes wird auch als die zur Klasse gehörige Metaklasse bezeichnet Die Semantik einer Klasse hängt von der zugehörigen Metaklasse ab Der Typ einer new-style Klasse ist type type ist die Metaklasse von allen built-in Typen, sogar von sich selbst David Robakowski Fachhochschule Wedel Python & PyDev
  • 192.
    Python OOP PyDev Fazit Metaklassen Metaklassen In Python haben alle Objekte einen Typ Der Typ eines Klassen-Objektes wird auch als die zur Klasse gehörige Metaklasse bezeichnet Die Semantik einer Klasse hängt von der zugehörigen Metaklasse ab Der Typ einer new-style Klasse ist type type ist die Metaklasse von allen built-in Typen, sogar von sich selbst Die Metaklasse erstellt ein Klassen-Objekt und bindet dieses Objekt an den Klassennamen David Robakowski Fachhochschule Wedel Python & PyDev
  • 193.
    Python OOP PyDev Fazit Metaklassen Metaklassen In Python haben alle Objekte einen Typ Der Typ eines Klassen-Objektes wird auch als die zur Klasse gehörige Metaklasse bezeichnet Die Semantik einer Klasse hängt von der zugehörigen Metaklasse ab Der Typ einer new-style Klasse ist type type ist die Metaklasse von allen built-in Typen, sogar von sich selbst Die Metaklasse erstellt ein Klassen-Objekt und bindet dieses Objekt an den Klassennamen Es lassen sich auch eigene Metaklassen implementieren David Robakowski Fachhochschule Wedel Python & PyDev
  • 194.
    Python OOP PyDev Fazit Metaklassen Metaklassen In Python haben alle Objekte einen Typ Der Typ eines Klassen-Objektes wird auch als die zur Klasse gehörige Metaklasse bezeichnet Die Semantik einer Klasse hängt von der zugehörigen Metaklasse ab Der Typ einer new-style Klasse ist type type ist die Metaklasse von allen built-in Typen, sogar von sich selbst Die Metaklasse erstellt ein Klassen-Objekt und bindet dieses Objekt an den Klassennamen Es lassen sich auch eigene Metaklassen implementieren Im Vergleich zu anderen Sprachen unterstützt Python somit den vollen Funktionsumfang von Metaklassen David Robakowski Fachhochschule Wedel Python & PyDev
  • 195.
    Python OOP PyDev Fazit Metaklassen Metaklassen In Python haben alle Objekte einen Typ Der Typ eines Klassen-Objektes wird auch als die zur Klasse gehörige Metaklasse bezeichnet Die Semantik einer Klasse hängt von der zugehörigen Metaklasse ab Der Typ einer new-style Klasse ist type type ist die Metaklasse von allen built-in Typen, sogar von sich selbst Die Metaklasse erstellt ein Klassen-Objekt und bindet dieses Objekt an den Klassennamen Es lassen sich auch eigene Metaklassen implementieren Im Vergleich zu anderen Sprachen unterstützt Python somit den vollen Funktionsumfang von Metaklassen David Robakowski Fachhochschule Wedel Python & PyDev
  • 196.
    Python OOP PyDev Fazit Metaklassen Metaklassen In Python haben alle Objekte einen Typ Der Typ eines Klassen-Objektes wird auch als die zur Klasse gehörige Metaklasse bezeichnet Die Semantik einer Klasse hängt von der zugehörigen Metaklasse ab Der Typ einer new-style Klasse ist type type ist die Metaklasse von allen built-in Typen, sogar von sich selbst Die Metaklasse erstellt ein Klassen-Objekt und bindet dieses Objekt an den Klassennamen Es lassen sich auch eigene Metaklassen implementieren Im Vergleich zu anderen Sprachen unterstützt Python somit den vollen Funktionsumfang von Metaklassen siehe Beispiel: „ex_metaclass.py“ [4] David Robakowski Fachhochschule Wedel Python & PyDev
  • 197.
    Python OOP PyDev Fazit Zu PyDev Gliederung 1 Python 2 OOP Geschichte Objektsystem Eigenschaften Klassen Sprachumfang Vererbung Paradigmen Metaklassen Einsatzgebiete 3 PyDev Vor- und Nachteile Zu PyDev 4 Fazit Mein Fazit David Robakowski Fachhochschule Wedel Python & PyDev
  • 198.
    Python OOP PyDev Fazit Zu PyDev PyDev Code Vervollständigung David Robakowski Fachhochschule Wedel Python & PyDev
  • 199.
    Python OOP PyDev Fazit Zu PyDev PyDev Code Vervollständigung Syntax Highlighting David Robakowski Fachhochschule Wedel Python & PyDev
  • 200.
    Python OOP PyDev Fazit Zu PyDev PyDev Code Vervollständigung Syntax Highlighting Syntax Analyse David Robakowski Fachhochschule Wedel Python & PyDev
  • 201.
    Python OOP PyDev Fazit Zu PyDev PyDev Code Vervollständigung Syntax Highlighting Syntax Analyse Code Refectoring Tools: David Robakowski Fachhochschule Wedel Python & PyDev
  • 202.
    Python OOP PyDev Fazit Zu PyDev PyDev Code Vervollständigung Syntax Highlighting Syntax Analyse Code Refectoring Tools: Konstruktor und Instanzattribute erzeugen David Robakowski Fachhochschule Wedel Python & PyDev
  • 203.
    Python OOP PyDev Fazit Zu PyDev PyDev Code Vervollständigung Syntax Highlighting Syntax Analyse Code Refectoring Tools: Konstruktor und Instanzattribute erzeugen Properties erzeugen David Robakowski Fachhochschule Wedel Python & PyDev
  • 204.
    Python OOP PyDev Fazit Zu PyDev PyDev Code Vervollständigung Syntax Highlighting Syntax Analyse Code Refectoring Tools: Konstruktor und Instanzattribute erzeugen Properties erzeugen Überschreiben/Implementieren von Methoden David Robakowski Fachhochschule Wedel Python & PyDev
  • 205.
    Python OOP PyDev Fazit Zu PyDev PyDev Code Vervollständigung Syntax Highlighting Syntax Analyse Code Refectoring Tools: Konstruktor und Instanzattribute erzeugen Properties erzeugen Überschreiben/Implementieren von Methoden Debugger David Robakowski Fachhochschule Wedel Python & PyDev
  • 206.
    Python OOP PyDev Fazit Zu PyDev PyDev Code Vervollständigung Syntax Highlighting Syntax Analyse Code Refectoring Tools: Konstruktor und Instanzattribute erzeugen Properties erzeugen Überschreiben/Implementieren von Methoden Debugger Templates David Robakowski Fachhochschule Wedel Python & PyDev
  • 207.
    Python OOP PyDev Fazit Zu PyDev PyDev Code Vervollständigung Syntax Highlighting Syntax Analyse Code Refectoring Tools: Konstruktor und Instanzattribute erzeugen Properties erzeugen Überschreiben/Implementieren von Methoden Debugger Templates Interaktive Konsole David Robakowski Fachhochschule Wedel Python & PyDev
  • 208.
    Python OOP PyDev Fazit Mein Fazit Gliederung 1 Python 2 OOP Geschichte Objektsystem Eigenschaften Klassen Sprachumfang Vererbung Paradigmen Metaklassen Einsatzgebiete 3 PyDev Vor- und Nachteile Zu PyDev 4 Fazit Mein Fazit David Robakowski Fachhochschule Wedel Python & PyDev
  • 209.
    Python OOP PyDev Fazit Mein Fazit Fazit Sehr leicht zu erlernen David Robakowski Fachhochschule Wedel Python & PyDev
  • 210.
    Python OOP PyDev Fazit Mein Fazit Fazit Sehr leicht zu erlernen Extrem flexibel, durch Objekt-Modell, super(), __mro__ David Robakowski Fachhochschule Wedel Python & PyDev
  • 211.
    Python OOP PyDev Fazit Mein Fazit Fazit Sehr leicht zu erlernen Extrem flexibel, durch Objekt-Modell, super(), __mro__ Macht Spaß zu entwickeln David Robakowski Fachhochschule Wedel Python & PyDev
  • 212.
    Python OOP PyDev Fazit Mein Fazit Fazit Sehr leicht zu erlernen Extrem flexibel, durch Objekt-Modell, super(), __mro__ Macht Spaß zu entwickeln Es lassen sich durch die Menge an Bibliotheken in kürzester Zeit umfangreiche Programme erstellen David Robakowski Fachhochschule Wedel Python & PyDev
  • 213.
    Python OOP PyDev Fazit Mein Fazit Fazit Sehr leicht zu erlernen Extrem flexibel, durch Objekt-Modell, super(), __mro__ Macht Spaß zu entwickeln Es lassen sich durch die Menge an Bibliotheken in kürzester Zeit umfangreiche Programme erstellen Python könnte an der einen oder anderen Stelle ein wenig konsequenter sein, z.B. bei der Kapselung David Robakowski Fachhochschule Wedel Python & PyDev
  • 214.
    Python OOP PyDev Fazit Mein Fazit Literatur & weiterführende Links Python in a Nutshell, 2nd Edition, Alex Martelli Dive Into Python, http://diveintopython.org Python, http://python.org Alle Code-Beispiele finden Sie auf meiner Homepage http://www.robakowski.com Die ausführliche Ausarbeitung zur Präsentation finden Sie unter http://python.robakowski.com David Robakowski Fachhochschule Wedel Python & PyDev