Diskussion:Python unter Linux: Rund um OOP

Seiteninhalte werden in anderen Sprachen nicht unterstützt.
Aus Wikibooks

Kapselung in Python[Bearbeiten]

Hallo,

ich halte den Ansatz der Datenkapselung wie hier beschrieben für Python unpassend. Generell stimme ich zwar zu, dass Daten innerhalb von Klassen gekapselt und über getter und setter zugänglich gemacht werden sollten, jedoch betrifft dies vor allem Sprachen wie Java oder C++, die nur wenig dynamisch programmiert werden.

Der Hauptgrund, warum Datenkapselung bei OOP betrieben wird besteht darin, dass man bei sich bei Verwendung einer Klasse (bzw. eines Objekts) immer im Klaren darüber ist, welchen Zustand die Attribute z.Z. haben. D.h. man will nicht, dass Attribute "von Außen" verändert werden, ohne dass man dies nicht kontrollieren kann. Bei Sprachen wie Java müssen deshalb getter und setter eingesetzt werden, weil ansonsten kein Code ausgeführt werden kann (der beispielsweise die Validität der Eingabewerte prüft), wenn den Attributen Werte zugewiesen bzw. abgerufen werden.

In der Praxis führt dies zu einer Unmenge von Code aus "leeren" gettern und settern die überhaupt keinen Code aus der eigentlichen Zuweisung beinhalten. Dies bläht den Programmcode unnötig auf, führt zu unnötigen Funktionsaufrufen (daher mehr CPU- und RAM-Verbrauch) und macht den Code unübersichtlich und schwieriger für den Programmierer zu warten.

Für Java ist dies ein Muss, da nachträglich eingeführte getter und setter extrem viel Arbeit bedeuten und fehlerträchtig sind. Da Java vor Ausführung in Bytecode kompiliert wird, vermute ich, dass es auch keine großen Unterschiede in der Laufzeit mit sich bringt, da "leere" getter und setter vermutlich wegoptimiert werden.

Mit Python dagegen kann man getrost auf getter und setter verzichten, da Python eine Möglichkeit bietet, an bestehende Attribute nachträglich getter und setter anzuhängen. Diese werden automatisch aufgerufen, wenn den Attributen Werte zugewiesen werden bzw. ihre Werte abgefragt werden. (vergl.: "property()"-Funktion)

Weitere Informationen zu Unterschieden zwischen Java und Python gibt es hier: Python is not Java (ein meiner Meinung nach sehr lesenswerter Artikel für Python-Programmierer)

Wenn Du willst, kann ich die OOP-Seite dementsprechend abändern und oben aufgeführte Informationen detaillierter (vielleicht noch mit Beispielen) beschreiben. (einfach per Kommentar auf meiner Benutzer-Seite oder per EMail-Funktion Bescheid geben)

Viele Grüße,

Florian.Sittel 18:37, 20. Aug. 2008 (CEST)[Beantworten]

Hallo Florian.Sittel,
gut dass du dich meldest. Ich habe vor einiger Zeit dieses Buch halbfertig übernommen, und einiges überarbeitet. An OOP habe ich mich ehrlich gesagt noch gar nicht rangetraut, weil meine Erfahrungen in Python auf diesem Bereich nicht so weit gehen (schlimmer noch, ich programmiere in der Uni überwiegend in Java). Ich habe den von dir angesprochenen Text mal überflogen, und gebe dir recht: Python ist nicht Java, und Code-aufblähende Entwurfsmuster sind eine der schlimmsten Seuchen von Java. Aber wie schon gesagt:
Dieses Buch soll nicht vermitteln, wie man Pascal-Programme in Python schreibt, sondern wie man Python-Programme schreibt.
und
Mitarbeit ist immer gewünscht.
Ich würde mich sehr freuen wenn du dieses Kapitel überarbeitest (auf diese Weise lerne ich an "meinem" Buch selbst noch was ;-) ). Viele Grüße,
Schmidt2 12:15, 21. Aug. 2008 (CEST)[Beantworten]


  • Ich habe versucht, durch etwas mehr Text, Hinweise auf den Gebrauch von gettern, settern und privaten Attributen/Methoden zu geben. Vielleicht kann da nochmal jemand drüberschauen und mir schreiben, ob das so verständlich herüberkommt. Tandar 13:17, 27. Jan. 2009 (CET)[Beantworten]