Klassen in Python
Man kann Objekte übersichtlich gruppieren, indem man ähnliche Objekte zu einem „Typ“ zusammenfaßt.
Klassen von Werten
Wir haben bisher schon verschiedene Werte kennengelernt, die durch Literale wie »65«, »12.82« oder »'Alpha'« geschrieben werden. Diese Werte gehören offensichtlich verschiedenen Typen an: Die ersten beiden Werte sind Zahlen und der dritte ein Text. Tatsächlich ordnet man solchen Werten in Python verschiedene sogenannte Klassen zu (die man auch Typen oder Datentypen nennt).
Jedes Objekt hat eine bestimmte Klasse, die festlegt, wo das Objekt verwendet werden kann.
Mit „Typ eines Objektes“ meint man nichts anderes als die Klasse dieses Objektes, da ein Typ in Python immer eine Klasse ist.
- Der Typ eines Objektes ist eine Klasse
Typ
Objekt -------------------> Klasse
Klassen sind in Python übrigens auch wieder Objekte (sie sind gleichzeitig Klassen und Objekte). Alle Klassen sind Objekte, aber nicht alle Objekte sind Klassen. Daher haben alles Klassen auch wieder einen Typ (der wieder eine Klasse ist), aber den Typ von Klassen benötigen wir in diesem Teil des Kurses noch nicht …
Klassen sind Objekte.
»int«
Das Objekt eines ganzzahligen Numerales hat die Klasse »int« (egal, ob es sich um ein Dezimalnumerale oder um ein Hexadezimalnumerale handelt).
Diese Klasse kann noch sehr viele Stellen genau darstellen.
- Eingabe eines Ausdrucks und Ausgabe einer Textdarstellung seines Wertes
9_223_372_036_854_775_808
9223372036854775808
- Eingabe eines Ausdrucks und Ausgabe einer Textdarstellung seines Wertes
999_999_999_999_999_999_999_999_999_999_999_999_999
999999999999999999999999999999999999999
»float«
Die Klasse »float« wird auch als Gleitkommaklasse bezeichnet, da seine Zahlen intern normalerweise in einer sogenannten „Gleitkommadarstellung“ abgespeichert werden. Entsprechend nennt man die Werte (Zahlen) dieser Klasse und ähnlicher Klassen auch Gleitkommazahlen.
Wenn ein Numerale mit einem Punkt ».« geschrieben wird, so ergibt es einen float-Wert.
float-Werte werden mit einem Punkt ».« ausgegeben, so daß man sie dadurch von int-Werten unterscheiden kann.
Wir zeigen hier noch einige Eigenschaften dieser Klasse.
Die Klasse »float« ist nicht beliebig genau. Ab zirka der 14. Stelle kann es zu Verfälschungen des Wertes kommen.
- Eingabe eines Ausdrucks und Ausgabe einer Textdarstellung seines Wertes
1.999_999_999_999_999_9
2.0
float-Werte sind in den hinteren Stellen also manchmal ungenau. Daher sollten sie für prinzipiell ungenaue (kontinuierliche) Werte verwendet werden, wie beispielsweise Meßwerte kontinuierlicher Größen (wie Länge, Geschwindigkeiten oder Temperaturen). Solche Werte können praktisch nie auf mehr als 14 Stellen gemessen werden, so daß es für ihre Speicherung und Verarbeitung akzeptabel ist, wenn ab der 14. Stelle Fehler auftreten.
Das Literal »9_007_199_254_740_991.« (2⁵³-1, also zirka 9×10¹⁵, 9 Billiarden) ist das dem Zahlenwert nach größte ganzzahlige float-Literal, das eine Wertrepräsentation hat, die darauf schließen läßt, daß genau dieses Literal verwendet wurde, während sich die beiden nächsten Literale schon einen Wert teilen müssen.
- Eingabe von Ausdrücken und Ausgabe einer Textdarstellung ihrer Werte
9_007_199_254_740_991.
9007199254740991.0
9_007_199_254_740_992.
9007199254740992.0
9_007_199_254_740_993.
9007199254740992.0
Ungenauigkeiten in den hinteren Stellen würden bei Währungsbeträgen Probleme bereiten. Hier kann es unter Umständen hilfreich sein, diese durch Multiplikation mit einer Zahl wie 100 zunächst so zu verändern, daß keine Nachkommastellen mehr auftreten und darauf zu achten, daß der Betrag von »9_007_199_254_740_991.« nicht überschritten wird.
E-Numeralia
In einem Numerale steht »E« oder »e« für „mal Zehn hoch“. »2E3« oder »2e3« bedeutet also beispielsweise ‹ 2 × 10³ ›.
‹ 10³ › bezeichnet den Wert, den man erhält, wenn man die Zahl Eins dreimal mit 10 multipliziert. Allgemein bezeichnet für eine natürliche Zahl n der Term ‹ 10ⁿ › den Wert, den man erhält, wenn man die Zahl Eins n -mal mit 10 multipliziert.
‹ 10⁻³ › bezeichnet den Wert, den man erhält, wenn man die Zahl Eins dreimal durch 10 dividiert. Allgemein bezeichnet für eine natürliche Zahl n der Term ‹ 10⁻ⁿ › den Wert, den man erhält, wenn man die Zahl Eins n -mal durch 10 dividiert.
Dies bedeutet, daß das Dezimalkomma bei »2« um drei Schritte nach rechts verschoben werden soll. Man erhält so »2000«.
»2E3« bedeutet also nicht etwa „2³“, also die Zahl, welche man erhält indem man die Zahl Eins dreimal mit der Zahl 2 multipliziert (8).
- Eingabe eines Ausdrucks und Ausgabe einer Textdarstellung seines Wertes
2E3
2000.0
Wir verzichten an dieser Stelle auf eine ausführliche Darstellung des Aufbaus von E-Numeralia mit Aufbaudiagrammen, da E-Numeralia im weiteren Verlauf dieses Kurses nur selten als Teile des Quelltextes vorkommen. Zahlenwerte werden von Programmen zwar manchmal in der E-Schreibweise ausgegeben, aber um diese zu verstehen, reicht die obenstehende Erklärung bereits aus.
Die Klasse des Wertes eines E-Numerales ist ›float‹, auch wenn es keinen Punkt ».« enthält.
Auch schon bei Stellen vor dem Komma, sind float-Werte „ungenau“.
- Eingabe eines Ausdrucks und Ausgabe einer Textdarstellung seines Wertes
9_223_372_036_854_775_808.
9.223372036854776e+18
»str«
str stɚ (eine mögliche englische Aussprache)
Ein Objekt, das der Wert eines Zeichenfolgenliterals ist, hat die Klasse ›str‹.
Ein “str ” ist ein “character string ”, also – wörtlich – eine Kette (Verkettung) von Schriftzeichen, eine Zeichenkette (Zeichenfolge).
Zur Verdeutlichung der Klasse ›str‹ werden Ausgabe in der Konsole bei manchen Python -Implementationen in Apostrophen geschrieben.
Kein Typ: »string«
Es gibt in Python auch noch etwas, das als »string« bezeichnet wird (mit »ing« am Ende). Dies ist nicht die Klasse ›str‹! Es hat eine spezielle Bedeutung, die wir derzeit noch nicht benötigen. Jedoch sollte man darauf achten, »string« nicht mit »str« zu verwechseln. Die Klasse einer Zeichenfolge ist ›str‹ und nicht ›string‹!
Akzeptabel: „String“
Auch, wenn dies eigentlich kein deutsches Wort ist, und »string« in Python auch noch eine andere Bedeutung hat, erscheint es doch als akzeptabel ein Objekt mit dem Typ ›str‹ auch als ein „String “ zu bezeichnen, wenn keine Mißverständnisse möglich sind, da dieses Wort so viel kürzer ist als die korrekte deutschsprachige Bezeichnung „Zeichenfolge“ oder gar „Zeichenfolgenobjekt“.
Klassen
Zahlenklassen, wie ›int‹ und ›float‹, nennen wir auch numerische Klassen.
- Klassenhierarchie
Wert/Objekt
|
|
.------------.------------.
| | |
| | |
int float str- Beispiele für Schreibweisen für Objekt oder Werte bestimmter Klassen
- ›int‹: «0», «1», «2», «12»
- ›float‹: «0.2», «1.2», «2e3», «12.0»
- ›str‹: «'0'», «'1'», «'True'», «'False'», «'0.2'», «'12.2'», «'1e3'», «'None'», «'NoneType'», «''»
Typen von Quelltext
Teile des Quelltextes sind Folgen von Zeichen. Sie haben keinen Typ. Nur Objekte haben einen Typ. Wenn man also sagt, daß das Literal »2« den Typ »int« habe, meint man damit eigentlich, daß die Auswertung des Literals »2« ein Objekt ergibt, und dieses Objekt den Typ »int« hat.
Übungsfragen
? Wertklassen
Welche Klasse haben die Werte der folgenden Literale jeweils?
- 1
- 1.2
- '3'
- 2E3
- "2"
Klassen in einer Python -Implementation ⃗
Eine Python -Implementation, die sich einen Wert merken muß, verwendet, um sich den Wert zu notieren, eine bestimmte interne Sprache, die durch den Klasse des Wertes bestimmt ist. Daher muß die Python -Implementation zu jedem notierten Wert auch dessen Klasse kennen, um die Notiz später bei Bedarf wieder mit der richtigen internen Sprache entschlüsseln zu können. Da sie dies aber von alleine alles schon richtig macht, muß der Programmierer sich mit diesen internen Abläufen nicht beschäftigen.