Seite 1 von 1

Klassen - Private Attribute und Methoden/Funktionen

Verfasst: Mittwoch 4. März 2009, 19:11
von SnakeBite
Hallo.

Ich lerne gerade Python und bisher eigentlich auch recht erfolgreich. :-)
Allerdings bin ich jetzt auf ein Problem gestoßen, bei dem ich nicht mehr weiter weiß und auch recherchieren im Forum nichts gebracht hat, nämlich Private Attribute und Methoden in einer Python Klasse.

Ich verstehe was man damit machen kann, aber was hat das für einen Sinn?? Warum will ich ein Attribut oder eine Methode nur privat nutzen?

Ich würds verstehen wenn es sich dabei um ein namespace Problem handeln würde, wie bei globalen variablen z.b., aber das scheint ja nicht der Grund zu sein.

Vielen Dank schonmal.

SnakeBite

P.S. Der erste Post gleich eine Frage ist eigentlich nicht so das Wahre, liess sich aber leider nicht vermeiden.

Verfasst: Mittwoch 4. März 2009, 19:36
von cofi
Python hat keine privaten Attribute. Wenn du Attribute mit einem vorangestellten Unterstrich meinst, so sind die dazu da anzuzeigen, dass man sie als Nutzer der Klasse nicht benutzen sollte, denn es handelt sich um Implementationdetails. Wozu das da ist, kannst du hier nachlesen: http://de.wikipedia.org/wiki/Datenkapse ... ammierung)

Re: Klassen - Private Attribute und Methoden/Funktionen

Verfasst: Mittwoch 4. März 2009, 19:50
von kbr
SnakeBite hat geschrieben:...
Private Attribute und Methoden in einer Python Klasse.

Ich verstehe was man damit machen kann, aber was hat das für einen Sinn?? Warum will ich ein Attribut oder eine Methode nur privat nutzen?

Ich würds verstehen wenn es sich dabei um ein namespace Problem handeln würde, wie bei globalen variablen z.b., aber das scheint ja nicht der Grund zu sein.
Eigentlich ist genau das der Grund, eben eine Hürde zu errichten, damit Instanz-Variable nicht versehentlich neu gesetzt, oder Methoden von außen aufgerufen werden. In Python geht das dennoch und ein führender Unterstrich ist reine Konvention (bei doppelten ist der Zugriff nur bei Kenntnis des Klassennamens möglich). Sie zeigen einem diszipliniertem Programmierer, dass die jeweiligen Bezeichner nicht zur API einer Klasse gehören und von außen nicht auf sie zugegriffen werden sollte.
SnakeBite hat geschrieben:P.S. Der erste Post gleich eine Frage ist eigentlich nicht so das Wahre, liess sich aber leider nicht vermeiden.
Für Fragen ist das Forum da :wink:

Verfasst: Mittwoch 4. März 2009, 19:58
von cofi
Doppelte Führende Unterstriche sind genau _nicht_ dazu gedacht ein `private' zu simulieren, sondern nur um (sehr selten) auftretende Namenskonflikte zu lösen. So etwas gibt es schlichtweg in Python nicht.

Verfasst: Mittwoch 4. März 2009, 20:39
von kbr
cofi hat geschrieben:Doppelte Führende Unterstriche sind genau _nicht_ dazu gedacht ein `private' zu simulieren, sondern nur um (sehr selten) auftretende Namenskonflikte zu lösen. So etwas gibt es schlichtweg in Python nicht.
Richtig, "private" gibt es in Python nicht. Dennoch: doppelte führende Unterstriche sind in Python eben wegen der impliziten Bezeichnermodifizierung die einzige Möglichkeit, eine Art von "private" zu erreichen, sofern denn dies gewünscht wird.

Verfasst: Mittwoch 4. März 2009, 21:18
von BlackJack
Nein, die bessere Art ist *ein* Unterstrich.

Verfasst: Mittwoch 4. März 2009, 21:55
von kbr
BlackJack hat geschrieben:Nein, die bessere Art ist *ein* Unterstrich.
Vielleicht hatte ich mich mißverständlich ausgedrückt. Es ging mir um den Unterschied von führenden Unterstrichen und nicht um Programmierstil.