Naja nicht gleich "krank"... in anderen Programmiersprachen gibt es eben "public", "private" und "protected"... Python bietet vergleichbar zwei dieser drei Arten an, aber "protected" fehlt eben (leider).
Andere Programmiersprachen bieten noch viel, viel mehr an.
C++ hat "friend", mit dem man anderen erlauben kann, an den eigenen private parts rumzuspielen (warum da friend und nicht lover genommen wurde, wird sich mir nie erschliessen
)
Java hat noch "default", was auf "jeder in meinem package und alle, die auch protected dürfen" hinausläuft.
Der Punkt ist aber, wozu du das nutzen willst. Bei C++ kannst du alles per Pointer oder Cast umgehen, du kannst also nicht das Programm von der Programmierern, sondern nur die Programmierer vor sich selbst schützen.
Bei Java hängt da afaik auch ein gewisses Sandboxing mit dran (applets & co), was aber in einer skriptsprache wie python nicht Sinnvoll zu realisieren ist.
Bliebe also der "wir schützen die Programmierer vor sich selbst"-ansatz.
Da bliebe zu sagen: Wer entgegen der ausdrücklichen Warnung (fass nichts an, was mit _ beginnt) Werte nutzt, ist auch durch härtere Maßnahmen nicht vor sich selbst zu schützen.
Ich fände es ganz sinnvoll... Namenskollisionen könnte man ja trotzdem vermeiden; man müsste nur zwischen "protected" und "private" unterscheiden können... damit liegt die Absicht beim Programmierer.
Man kann zwischen Protected und Private unterscheiden, wenn du so willst.
__x ist private, man kommt nur über unsportliche umwege dran.
_x ist protected/default, jeder, der es anfasst, muss wissen, was er tut.
alles andere ist Public.
Irgendwo zu dokumentieren, dass das Attribut nur lesend zu benutzen ist ist zu unsicher -> ihr kennt euch ja selber wie genau ihr solche Hinweise lest und beachtet.
Es bedarf keiner Hinweise. "_" ist Hinweis genug. Ich kann mir keinen fall vorstellen, wo jemand da etwas "Aus versehen manipulieren" kann.
Klar kann man auch "brutal" mittels `_Class__attribute` Mist machen, aber das ist schon eine andere Einstellung zur Herangehensweise. Sicher ist nichts, wenn der Quellcode zugänglich ist...
Könntest du diese dubiose Statement bitte etwas erläutern?