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
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