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.
Klassen - Private Attribute und Methoden/Funktionen
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
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)
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:...
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.
Für Fragen ist das Forum daSnakeBite hat geschrieben:P.S. Der erste Post gleich eine Frage ist eigentlich nicht so das Wahre, liess sich aber leider nicht vermeiden.
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
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.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.