Klassen - Private Attribute und Methoden/Funktionen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
SnakeBite
User
Beiträge: 33
Registriert: Mittwoch 4. März 2009, 18:26

Klassen - Private Attribute und Methoden/Funktionen

Beitragvon SnakeBite » Mittwoch 4. März 2009, 19:11

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.
Benutzeravatar
cofi
Moderator
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Beitragvon cofi » Mittwoch 4. März 2009, 19:36

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 ... rammierung)
Benutzeravatar
kbr
User
Beiträge: 806
Registriert: Mittwoch 15. Oktober 2008, 09:27
Wohnort: Düsseldorf

Re: Klassen - Private Attribute und Methoden/Funktionen

Beitragvon kbr » Mittwoch 4. März 2009, 19:50

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:
Benutzeravatar
cofi
Moderator
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Beitragvon cofi » Mittwoch 4. März 2009, 19:58

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.
Benutzeravatar
kbr
User
Beiträge: 806
Registriert: Mittwoch 15. Oktober 2008, 09:27
Wohnort: Düsseldorf

Beitragvon kbr » Mittwoch 4. März 2009, 20:39

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

Beitragvon BlackJack » Mittwoch 4. März 2009, 21:18

Nein, die bessere Art ist *ein* Unterstrich.
Benutzeravatar
kbr
User
Beiträge: 806
Registriert: Mittwoch 15. Oktober 2008, 09:27
Wohnort: Düsseldorf

Beitragvon kbr » Mittwoch 4. März 2009, 21:55

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.

Wer ist online?

Mitglieder in diesem Forum: Whitie