albertus hat geschrieben:Der Zustand eines Objektes wird durch den Zustand seiner Attribute bestimmt. Ändert sich der Zustand eines Objekt-Attributs, wird das Eltern-Objekt in einen anderen Zustand überführt. So weit so gut. Was ist aber jetzt nach obiger Definition der Zustand bei einer Python list oder eines Python dictionarys? Wo sind da die Attribute? Das sind doch reine C Datenstrukturen oder? Spricht man in so einem Fall von Zustand?
Die Attribute sind in C. Dies widerspricht der vorherigen Definition *nicht*, denn dort steht nirgends, dass die Attribute direkt in Python abrufbar sein müssen.
Ich vermute, die Definition will unterscheiden zwischen dem statischen Code von Methoden und dem sich ändernden Inhalt von Attributen. Soll heißen: Die Logik der Methoden ist vorher festgelegt. Es könnte zwar sein, dass im Fall von Zustand X der Codepfad A genommen wird und im Fall von Zustand Y hingegen der Pfad B beschritten wird, aber diese Verzweigung ist ja trotzdem vorab im Code definiert worden. Allein der beim Ausführen der Methode bestehende Zustand bestimmt darüber, welcher Pfad beschritten wird. Oder ganz allgemein: Der Zustand des oder der Attribute bildet die Grundlage für das Ergebnis des Methodenaufrufs.
Und für diese Unterscheidung ist nur wichtig, dass Attribute die Basis für das Verhalten von Methoden sind. Ob diese Attribute für den Benutzer der Objekte greifbar sind, ist in dem Moment egal. In einigen Programmiersprachen ist es sogar gängige Praxis, dass der Benutzer der API überhaupt nicht auf direktem Wege an die Attribute herankommen soll (Stichwort: Datenkapselung). Dort müssen dann immer Zugriffe über sogenannte Getter- und Setter-Methoden erfolgen. Die Attribute werden in dem Fall also nur als interne Hilfsmittel betrachtet, die für den Anwender quasi unsichtbar sind. Eben genau so unsichtbar wie es die in C vorliegenden Attribute einer Liste für dich als Python-Programmierer sind.