Typen in Python (Typen in Python), Lektion, Seite 723762
https://www.purl.org/stefan_ram/pub/typen_python (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
Python-Kurs

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.

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram723762 stefan_ram:723762 Typen in Python Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd723762, slrprddef723762, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/typen_python