Your SlideShare is downloading. ×

Python & PyDev

1,713
views

Published on

Published in: Technology, Education

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,713
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 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