lunar hat geschrieben:Nun, die Verwendung von __slots__ zur Steuerung der Attributzugriffe ist immer der falsche Ansatz, weil __slots__ dafür nicht gedacht ist!
Das Überscheiben von __[gs]etattr__ zur Zugriffssteuerung ist im mindesten fraglich, da "harte" Zugriffsbeschränkung nicht zu den Konzepten von Python passt.
Ja, das habe ich nun beides - dank eurer Unterstützung - auch verstanden.
lunar hat geschrieben:Fazit: Wenn du Zugriffsbeschränkungen nutzen musst, dann ist höchstwahrscheinlich der Ansatz zur Problemlösung verkehrt.
Ich MUSS sie nicht nutzen in dem Sinne, dass es anders nicht ginge, sondern ich HÄTTE sie GERNE genutzt, weil es im konkreten Fall hilfreich gewesen wäre. Das Hauptaugenmerk lag/liegt darauf, bei versehentlich falsch notierten Attributen eine Fehlermeldung zu bekommen, um die ansonsten in solchen Fällen manchmal schwer aufzufindenden Fehler leichter ausmachen zu können.
Bis gestern nachmittag war ich ja noch davon ausgegangen, dass slots genau zu dem Zweck gedacht sind; jetzt, wo ich schlauer geworden bin und klar ist, dass Python eigentlich bewusst keine Konstruktion vorgesehen hat, um eine dynamische Ergänzung von Attributen zu verhindern, werde ich wohl auch darauf verzichten. Der Weg über __getattr__/__setattr__ hat ja - abgesehen davon, dass es nicht gerade elegant ist - auch den Nachteil, dass die Perfomance bei direkten Attributzugriffen dadurch deutlich leidet.
lunar hat geschrieben:Der Link von Trundle hat dir offenbar aber geholfen... und das war ein Link zur offiziellen Dokumentation der nächsten Python Version. Ich habe den Link zur aktuellen Doku gepostet, die zwar nicht ganz so schön aussieht, in der aber im Bezug auf __slots__ exakt das gleiche steht.
Stimmt alles. Aber Trundle hat es sich verkniffen, den Link durch einen Kommentar mit vorwurfsvollem Unterton zu garnieren ...
lunar hat geschrieben:Das wäre nicht der erste Fall eines schlechten Python Buchs.
Sicher. Ist ja auch in einigen Threads schon ausgiebig erörtert worden. Das von mir zitierte Buch habe ich in einem dieser Threads auch schon selbst schlecht gemacht - allerdings aus anderen Gründen. Dass es - zumindest an diesem Punkt - nachweislich auch inhaltlich daneben liegt, war für mich neu.