Guten Tag zusammen,
also bin derzeit bei dem Kapitel OOP und zwar geht es um die Datenkapslung, einmal _mit privat markiert und __ sehr stark privat.
Da es mit _Klasse__Test zum Beispiel umgangen werden kann, wie viel bringt dann Datenkapslung eingenlich wirklich?
Mit freundlichen Grüßen
hume
Datenkapslung Python wie sinvoll jetzt?
Du verstehst das Feature nicht richtig. Der doppelte unterstrich vermeiden zufällige Namenskollisionen zwischen Objekten in einer Vererbungshierarchie. Und ist nicht zu einem besseren Zugriffsschutz gedacht, weil - wie du ja schon selbst anmerkst - es trivial ist, den zu umgehen.
ok, also das mit der Namenskollision ist mir bekannt. In einem Video wird aber behauptet: https://www.youtube.com/watch?v=wW1KSgHV8TA zur Sicherheit, also eine falsch Information?__deets__ hat geschrieben: ↑Montag 5. September 2022, 13:19 Du verstehst das Feature nicht richtig. Der doppelte unterstrich vermeiden zufällige Namenskollisionen zwischen Objekten in einer Vererbungshierarchie. Und ist nicht zu einem besseren Zugriffsschutz gedacht, weil - wie du ja schon selbst anmerkst - es trivial ist, den zu umgehen.
Video stammt von der Universität Bremen. Wiegt es also in falscher Sicherheit oder gibt es wirklich einen Sicherheitsaspekt?
Mit freundlichen Grüßen
hume
- noisefloor
- User
- Beiträge: 3856
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
"Sicherheit" im Sinne von "kommt keiner dran" -> nein, gibt es nicht. "Sicherheit" im Sinne von "Sicherheit vor Namenskollisionen" -> ja.
Jedenfalls "verstecken" ein einfacher oder doppelter führendes Unterstrich keine Attribute oder Methode einer Klasse.
Gruß, noisefloor
"Sicherheit" im Sinne von "kommt keiner dran" -> nein, gibt es nicht. "Sicherheit" im Sinne von "Sicherheit vor Namenskollisionen" -> ja.
Jedenfalls "verstecken" ein einfacher oder doppelter führendes Unterstrich keine Attribute oder Methode einer Klasse.
Gruß, noisefloor
Ok, passt, also habe ich es richtig verstanden.noisefloor hat geschrieben: ↑Montag 5. September 2022, 13:48 Hallo,
"Sicherheit" im Sinne von "kommt keiner dran" -> nein, gibt es nicht. "Sicherheit" im Sinne von "Sicherheit vor Namenskollisionen" -> ja.
Jedenfalls "verstecken" ein einfacher oder doppelter führendes Unterstrich keine Attribute oder Methode einer Klasse.
Gruß, noisefloor
Mit freundlichen Grüßen
hume
Was in dem Video vermittelt wird, ist prinzipiell alles richtig – aber nicht in Verbindung mit Python. Die doppelten führenden Unterstriche dienen eben nicht der Privatheit, sondern sind die Lösung für ein Problem in der Objektorientierten Programmierung mit Python, das meisten weder haben und viele auch nicht kennen.
Und Getter und Setter schützen auch nicht. Ich kann genauso gut 'katze.name' setzen wie 'katze.setName()' aufrufen. Der Vorteil eines Setters besteht in der Möglichkeit der Plausibilitätsprüfung, wie in dem Video auch korrekt erwähnt wird. In dem Fall kommen in Python aber Properties zum Einsatz.
Wer nach solchen Videos lernt, lernt kein idiomatisches Python – das ist hier leider wieder sehr deutlich zu erkennen.
Und Getter und Setter schützen auch nicht. Ich kann genauso gut 'katze.name' setzen wie 'katze.setName()' aufrufen. Der Vorteil eines Setters besteht in der Möglichkeit der Plausibilitätsprüfung, wie in dem Video auch korrekt erwähnt wird. In dem Fall kommen in Python aber Properties zum Einsatz.
Wer nach solchen Videos lernt, lernt kein idiomatisches Python – das ist hier leider wieder sehr deutlich zu erkennen.
Ok, also ich habe es bei sololearn.com gelernt und es wird von _ und __ abgeraten.kbr hat geschrieben: ↑Montag 5. September 2022, 14:14 Was in dem Video vermittelt wird, ist prinzipiell alles richtig – aber nicht in Verbindung mit Python. Die doppelten führenden Unterstriche dienen eben nicht der Privatheit, sondern sind die Lösung für ein Problem in der Objektorientierten Programmierung mit Python, das meisten weder haben und viele auch nicht kennen.
Und Getter und Setter schützen auch nicht. Ich kann genauso gut 'katze.name' setzen wie 'katze.setName()' aufrufen. Der Vorteil eines Setters besteht in der Möglichkeit der Plausibilitätsprüfung, wie in dem Video auch korrekt erwähnt wird. In dem Fall kommen in Python aber Properties zum Einsatz.
Wer nach solchen Videos lernt, lernt kein idiomatisches Python – das hier leider wieder sehr deutlich zu erkennen.
So ein Video kommt dabei rum, wenn sich Java-Programmierer/innen auf machen, ihre Denkstrukturen in Python umzusetzen. Grausam.
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Datenkapselung ist ein Konzept, das bei der Objektorientierten Programmierung wichtig ist, und das wird in dem Video auch erklärt. Unterschiedliche Programmiersprachen setzen das Konzept unterschiedlich um. Im Video wird das Konzept erklärt und mit Python-ähnlichem Code illustriert. Hat aber halt nichts mit wirklichem Python zu tun. Es bedarf also zweier Schritte, erstens Konzept verstehen, zweitens lernen, wie dieses Konzept in der jeweiligen Programmiersprache umgesetzt wird. Der zweite Schritt fehlt im Video.