Zugriffsbeschränkungen für Attribute

22/08/2008 - 14:37 von Thomas Mlynarczyk | Report spam
Hallo.

Ich bin mit PHP gut vertraut und habe mich jetzt auch etwas in Python
eingearbeitet. Nun unterscheidet sich das pythonische Denken ja
teilweise erheblich von der eher "javanischen" Philosophie, die PHP
verfolgt.

In PHP kann ich Methoden als "public", "protected" oder "private"
deklarieren, und PHP sorgt dafür, daß diese Zugriffsbeschrànkungen
strikt eingehalten werden. Motto: Privat ist privat!

In Python gibt es zwar nicht diese drei Schlüsselwörter, wohl aber
àhnliche Konzepte. Der entscheidende Unterschied ist, daß hier nichts
starr erzwungen wird. Ich *kann*, wenn ich denn unbedingt will, von
außen auf "_methoden" und sogar auf "__methoden" zugreifen. Motto: Du
wirst schon wissen, was du tust.

Nehmen wir an, ich habe eine Klasse, die irgendwas wahnsinnig Tolles
macht. Die Klasse hat private und öffentliche Methoden. Jetzt will ich
wissen, welche privaten Methoden wann aufgerufen werden - z.B. für
Debuggingzwecke oder um die Arbeit der Klasse zu loggen. Dazu will ich
selbstverstàndlich nicht den Code der Klasse àndern müssen. Ideal wàre
hier der Einsatz des Decorator-Musters (GoF). Nur müßte mein Decorator
Zugriff auf die privaten Methoden der dekorierten Klasse haben. Mit PHP
unmöglich, mit Python möglich. (Einziges Workaround für PHP wàre, statt
"private" stets "protected" zu nehmen. Ist aber auch nicht ideal.)

Nun scheinen die beiden Philosophien - "Privat ist privat" und "Du wirst
schon wissen, was du tust" - völlig gegensàtzlich zu sein. Entweder ist
die forcierte Zugriffsbeschrànkung in PHP ein Designfehler (und die drei
Schlüsselwörter sollten nur hinweisenden Charakter haben - àhnlich wie
der Unterstrich in Python) oder Python hat eine "Sicherheitslücke", weil
externer Zugriff auf private Methoden möglich ist.

Soviel ich weiß, wurde das Name-Mangling bei privaten Attributen
eingebaut, um versehentliches Überschreiben seitens abgeleiteter Klassen
zu verhindern. Denselben Zweck hàtte natürlich auch eine Zugriffssperre
à la "private" erfüllen können, was jedoch der Python-Philosophie
widersprochen hàtte.

Ich hàtte gerne ein paar Meinungen/Anregungen/Argumente aus pythonischer
Sicht zu dem Thema.

Gruß,
Thomas

Ce n'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!
(Coluche)
 

Lesen sie die antworten

#1 Karsten Schulz
22/08/2008 - 18:17 | Warnen spam
Thomas Mlynarczyk schrieb:
Nehmen wir an, ich habe eine Klasse, die irgendwas wahnsinnig Tolles
macht. Die Klasse hat private und öffentliche Methoden. Jetzt will ich
wissen, welche privaten Methoden wann aufgerufen werden - z.B. für
Debuggingzwecke oder um die Arbeit der Klasse zu loggen.



suchst Du traceReport?
<http://www.2shared.com/file/3801800...2.html>

Die dazu gehörige Diskussion findest Du in:
<http://www.python-forum.de/topic-15653.html>?

hth

Gruß
Karsten


Tips und Beispiele zur Wahrung der deutschen Sprache
(wenn schon, dann aber richtig!)
Falsch : "Ich habe eine Infrarot-Tastatur."
Richtig: "Ich habe eine Unterrot-größere-Anzahl-neben-und-
untereinander-liegender-Tasten."

Ähnliche fragen