S OFTWAREENTWICKLUNG
MIT P YTHON
St. Behrens
L. Hellmig
FAHRPLAN
Motivation und Kurzvorstellung
Über den Umgang mit Daten
Algorithmik
Grafisches mit Python
Turtlegrafik
GUI
Grundlagen der Objektorientierung
M OTIVATION
Delphi und Java stellen eine hohe
Einstiegshürde für Programmieranfänger
dar.
Ressourcen werden für Codierung statt für
die Modellierung von Daten und
Algorithmen verbraucht.
(Klammern- und Semikolonsuche in
unübersichtlichem Quelltext)
Verändertes Lizenzmodell für Delphi
Nach Übernahme von SUN durch Oracle
unklare Zukunft von Java
E RFAHRUNGSWERTE MIT P YTHON
Weiterbildungen/Vorlesungen
Programmiersprache der Landesolympiade
Informatik
www.pythonchallenge.org
Python als Sprache visueller
Programmierumgebungen
Hamster
Kara
Scratch
… www.pathfinder-mv.de
M ONTY
P YTHON :
Die
N a m e n s ge b e r
http://screenrant.com/bright-side-life-jake-16534/
5
P YTHON (*1990)
Verbreitung
lokale, plattformunabhängige,
zeitunkritische Anwendungen
Webapplikationen
Schnittstellen zu anderen
Programmiersprachen
http://www.flickr.com/photos/52614599@N00/199700290/
Philosophie
einfach, intuitiv und mächtig
Open Source
wie reines Englisch zu lesender
Quelltext
geeignet für tägliche Aufgaben und
kurze Entwicklungszeiten
Guido van Rossum
wohlwollender Diktator auf
Lebenszeit (Benevolent
Dictator for Life, BDFL)
6
PALINDROMTEST: J AVA
VS .
P YTHON
>>> import antigravity
S TECKBRIEF
Interpretierte Sprache
Implizite, dynamische, starke Typisierung
Struktur des Quelltextes ist Syntaxelement.
Unterstützung des
imperativen,
objektorientierten und
funktionalen
Programmierparadigmas
aktuelle Versionen
Python 3.2
Python 2.7.1
Python 3.x
Python 2.x
I NSTALLATION
http://www.python.org/
???
I NSTALLATION
http://www.portablepython.com/
Für weitere Plattformen (z. B. DOS ) sind
v. a. Versionen der 2.x-Reihe erhältlich.
I NSTALLATION
Installation des Python-Interpreters ist nötig
zum
Programmieren
Ausführen der Programme
Installierbar auf
lokalen Maschinen
Webservern
Erzeugen einer lauffähigen Anwendung
unter Windows ist mit dem Tool py2exe
möglich.
IDE S
Python Command Line
IDLE (Shell + IDE)
Syntaxhighlighting
Einfacher Debugger
Alternativen?
PythonWin (ActivePython)
PyEclipse, PyDev (Eclipse-Plugins)
Jython, CPython, IronPython, … (Java, C, .NET)
http://couchtripper.com/pics/comedy/EricIdle.jp
g
In der Standardausstattung enthalten sind
V OM Q UELLTEXT ZUM M ASCHINENCODE
Compiler
Übersetzung des
Quellcodes als Ganzes
in eine ausführbare
Programmdatei
Interpreter
Zeilenweise
Übersetzung des
Quelltextes und
umgehende Ausführung
Eins
Eins
Zwei
Drei
Eins
Zwei
Zwei
Eins
Zwei
Drei
Drei
Drei
14
P ROGRAMMAUSFÜHRUNG
Compiler
Geschwindigkeitsvorteile
Fehlererkennung:
1.
2.
Syntaktisch beim
Compilieren
Erkennen von
Laufzeitfehlern (technisch
bzw. semantisch)
Interpreter
In-Time-Übersetzung
reduziert die Performance.
Erkennung von Fehlern (mit
Ausnahme grober
Syntaxfehler) in den
betreffenden Zeilen erst bei
der Programmausführung.
Test einzelner Anweisungen
per Eingabekonsole möglich
15
E RSTE S CHRITTE
Python
IDLE STARTEN
P YTHON -S HELL ALS TASCHENRECHNER
Die Eingabe eines mathematischen Terms wird vom
Interpreter ausgewertet und auf der Konsole
ausgegeben.
>>> 8+2 #Addition
10
>>> 8-2 #Subtraktion
6
>>> 8*2 #Multiplikation
16
>>> 8/3 #Division
2.6666666666666665
>>> 8//5 #ganzzahlige Division
1
>>> 8%5 #Modulo (Rest bei
ganzzahliger Division)
3
>>> 8**3 #Potenzieren
512
Die Vorrangautomatik wird beherrscht.
2.666: Es wird ein Dezimal-PUNKT gesetzt.
18
DATENTYPEN
Python
D ATENTYPEN IN P YTHON
Jeder Datentyp ist eine Klasse.
Operieren mit
Klassenmethoden
des Datentyps selbst
importierter Klassen (z. B. math, random, …)
Built-in-Funktionen
http://docs.python.org/py3k/library/functions.html
?highlight=pow#built-in-functions
Operatoren
WICHTIGE
D ATENTYPEN IN P YTHON
Numerische Typen
int, float, complex
Boolescher Typ
bool
Sequentielle Typen
str, list, tuple
Mapping-Typ
dict
Mengentypen
set, frozenset
KeinWert-Typ
NoneType
21
N UMERISCHE D ATEN : O PERATOREN /F UNKTIONEN
+ - * /
**
//
%
<>
<= >=
== !=
Grundrechenarten
Potenzieren
Ganzzahlige Division
Modulo
Kleiner/Größer
Kleiner-Gleich/Größer-Gleich
Gleich/Ungleich
abs(x)
Absoluter Betrag
round(x,n) Rundung auf n Dezimalstellen
N UMERISCHE D ATEN : WEITERE K LASSEN
Die Klassen math
und random
beinhalten eine
Reihe weiterer
nützlicher
Funktionen.
Ein einmaliger
Import der Klasse
erfolgt mit import.
Aufruf mit
Punktnotation
klasse.methode()
N UMERISCHE D ATENTYPEN INT , FLOAT , COMPLEX
Wertebereich unterliegt keinen
Restriktionen! (2**200000)
float
Entspricht IEEE 754 double (64 Bit)
Informationen zum Wertebereich und zur
Genauigkeit des Datentyps erhält man mit
int
>>> import sys
>>> sys.float_info
sys.floatinfo(max=1.7976931348623157e+308,
max_exp=1024, max_10_exp=308,
min=2.2250738585072014e-308, min_exp=-1021,
min_10_exp=-307, dig=15, mant_dig=53,
epsilon=2.220446049250313e-16, radix=2, rounds=1)
complex
auf Anfrage
T YPBESTIMMUNG UND - UMWANDLUNG
Typbestimmung durch
type(Datum)
Typecasting mit
<zieltyp>(Datum)
Umwandlung in String-Typ
mit str(Datum)
format(Datum)
Jeder
Datentyp
ist eine
Klasse.
Ü BER DEN U MGANG MIT VARIABLEN
Implizite Typisierung
Zuteilung des Typs einer Variablen zur
Laufzeit in Abhängigkeit vom Wert.
Eine explizite Deklaration entfällt.
Dynamische Typisierung
Der Variablentyp kann sich während der
Laufzeit in Abhängigkeit von den Daten
ändern.
Starke Typisierung
Der Variablentyp ist stets eindeutig
bestimmbar.
I NTERNE D ATENVERWALTUNG IN P YTHON
Alle numerischen Typen sind immutabel.
Immutable Daten können nicht "am Platz"
überschrieben werden.
I NTERNE D ATENVERWALTUNG IN P YTHON
Alle numerischen Typen sind immutabel.
Prinzip: Die
Variablen werden
den Daten
zugeordnet.
T YPISIERUNG
Starke Typisierung
Alle Daten sind zu einem bestimmten
Zeitpunkt eindeutig einem Typ zuzuordnen.
Implizite Typisierung
Deklarierung von Variablen und Zuordnung
des Datentyps mit erster Wertzuweisung
Unnötig sind darum
eine explizite Deklaration der Variablen
die Angabe eines Datentyps
Dynamische Typisierung
Der Datentyp ist während der Laufzeit
veränderlich.
T YPISIERUNG IN P YTHON
stark
implizit
dynamisch
in der Konsole
kurzes Programm
D AS N ICHTS ALS D ATUM
NoneType None (kein Wert)
Eigener Datentyp mit nur einem Wert (None)
Dient dem Codieren fehlender/nicht
berechenbarer Daten
L OGISCHER D ATENTYP BOOL
bool
True/False
Operatoren and, or, not
Die Auswertung Boolescher Terme erfolgt stets
vermittels des Verfahrens der Lazy Evaluation,
d. h. analog zu den Java-Operatoren | bzw. &.
Ü BERSICHT ZU SEQUENTIELLEN D ATENTYPEN
Strings sind Zeichenketten
immutabler Datentyp
wort1 = 'Hallo'
wort2 = "Hallo"
Listen sind geordnete Reihungen beliebiger
Datentypen.
mutabler Datentyp
fibonacciliste = [0,1,1,2,3,5,8,13]
letter = ['Anton','Berta','Cäsar','Dora']
Tupel sind Listen "mit Schreibschutz".
immutabler Datentyp
letter = ('Anton','Berta','Cäsar','Dora')
S EQUENTIELLE D ATENTYPEN
Strings, Listen und Tupel
Die Länge von Strings und Listen ist
während der Laufzeit veränderlich.
Zu Tupeln gibt es nicht viel zu sagen.
Es gibt keinen statischen Datentyp Array.
I NDIZIERUNG SEQUENTIELLER D ATEN
liefert das i-te Element
der Sequenz s,
s[i:j] liefert den Ausschnitt von
Index i bis Index j von s ,
s[i:]
liefert den Ausschnitt von
Index i bis zum Ende von
s,
s[i:j:k] liefert den Ausschnitt von
Index i bis Index j von s,
wobei nur jedes k-te
Element innerhalb dieses
Ausschnitts beachtet wird
s[-i]
liefert das i -te Zeichen
von hinten,
s[i]
O PERATIONEN AUF SEQUENTIELLEN DATEN
x in s
x not in s
s+t
s+=t
s*n
is
==
prüft, ob sich x in der Sequenz s
befindet
prüft, ob sich x nicht in der
Sequenz s befindet
erzeugt Verkettung von s und t als
neuer Sequenz,
hängt die Sequenz t an die Sequenz
s an,
liefert einen neuen Sequenz, in der
die Sequenz s n-fach kopiert ist.
prüft zwei Sequenzen auf
physische Identität
prüft zwei Sequenzen auf
inhaltliche Identität
F UNKTIONEN /M ETHODEN S EQUENTIELLER D ATEN
Built-In-Funktionen
len(s)
min(s)
max(s)
liefert die Anzahl der
Elemente in s,
liefert das kleinste
Element von s, gemäß
der definierten
Ordnungsrelation.
liefert das größte
Element von s, gemäß
der definierten
Ordnungsrelation.
Methoden
count(x) Zählt das Auftreten
von Elementen mit
dem Wert x
index(x) Ermittelt den Index
des ersten Auftretens
von x
Z EICHENKETTEN
str
Werden im Unicode (UTF-8) gespeichert.
Können sowohl in "Gänsefüßchen" als auch
in 'Hochkommas' eingeschlossen werden.
Spezialfall """DocString""" bzw. '''DocString'''
Länge beliebig
Vermissen Sie einen char-Typ?
U MWANDLUNG Z AHL S TRING MIT FORMAT ()
Die Funktion format(...) erzeugt aus
numerischen Daten einen String, dessen
Eigenschaften mit Format-Spezifikationen
bestimmt werden können.
format(<wert>[, <format_spezifikation>])
Einfachster Fall:
39
U MWANDLUNG Z AHL S TRING MIT FORMAT ()
Die Format-Spezifikation bietet u. a. folgende Optionen.*
[Vorzeichen][0][Breite][,][.Genauigkeit][Typ]
Vorzeichen::= '+' | ' -' | ' '
'+' erzwingt ein Vorzeichen auch bei positiven Zahlen
Breite::= integer
Zahl der reservierten Stellen für den Ausdruck. Eine
führende 0 sorgt für das Auffüllen aller Stellen mit 0.
Das Komma erzeugt Tausendertrennungen.
Genauigkeit::= integer
Bestimmt die Genauigkeit. Sollte kleiner/gleich der Breite
sein. Nur für float-Typ verfügbar.
Typ bestimmt weitere datentypspezifische Formatierungen.
Genaueres in den Hinweisen zu den Typen int und float.
* ausführlicher auf:
http://docs.python.org/py3k/library/string.html#format-specification-mini-language
40
U MWANDLUNG Z AHL S TRING MIT FORMAT ()
Beispiele
41
M ETHODEN DER S TRING -K LASSE (A USWAHL )
find(...)
lower()
s.find(sub[, start[, end]]) int
s.lower() str
ermittelt den Index des ersten
Auftreten eines Substr ings. fail: -1
Wandelt alle Buchstabe n in
Kleinbuchstabe n.
(analog: upper())
count(...)
replace(...)
s.count(sub[, start[, end]]) int
s.replace (alt, neu[, count]) str
zählt das (nicht überlappende )
Vorkomme n eines Substr ing s
erzeugt eine Kopie des Strings,
bei der alle Teilstrings <old>
durch den Teilstring <neu>
ersetzt werden. Optional
<count>: maximale Zahl der
Ersetzungen
isalpha()
s.isalpha() bool
ist True, wenn alle Zeichen
Buchstabe n sind.
(analog: isdigit())
encode()
s.encode() str
zeigt die interne Codierung in
UTF-8 an.
42
S TRINGS ALS IMMUTABLER D ATENTYP
Es wäre naheliegend zu versuchen, eine
direkte Wertzuweisung für ein Zeichen des
Strings vorzunehmen, ABER...
Fehlerursache:
Strings sind immutable Datentypen, d. h. sie
können nicht "am Ort" geändert werden.
S TRINGS ALS IMMUTABLER D ATENTYP
Abhilfe schafft eine neue Wertzuweisung.
L ISTEN
list
Einschluss in eckige Klammern
Trennung der Elemente durch Komma
liste = [el0, el1, el2, … ,eln]
Listen können beliebige Datentypen
enthalten.
leereListe = []
listeMitZahlen = [1,2,3]
listeMitStrings = ['Hund', 'Katze', 'Maus']
gemischteListe = [1, 'Tiger', 45, -3.4, 'Huhn']
listeMitListen = [[1,2,3],['a','b','c']]
L ISTEN .M ETHODEN () (A USWAHL )
Element x zu a hinzufügen (ans
Ende)
a.insert(i,x) Element x zu a hinzufügen (an
Stelle i)
a.remove(x)
löscht x aus a
a.pop()
gibt das letzte Element von a
aus und löscht es
a.pop(n)
gibt das n-te Element von a aus
und löscht es
a.sort()
sortiert a lexikographisch
a.reverse()
dreht die Reihenfolge der
Elemente in a um
a.append(x)
46
L ISTEN ALS M UTABLER D ATENTYP
Die Elemente von Listen sind am Platz
überschreibbar.
Dies wird bei der Verwendung von Listen als
Funktionsparameter zu beachten sein.
L ISTEN VERSCHIEDENER D ATENTYPEN
In einer Liste können
verschiedene Datentypen
gespeichert werden:
Verbesserung:
Jedes Listenelement ist selbst eine Liste.
zettel[5][1]
zettel[5]
zettel[5][0]
zettel[4][1]
zettel[4]
zettel[4][0]
zettel[3][1]
zettel[3][0]
zettel[3]
zettel[2][1]
zettel[2]
zettel[2][0]
zettel[1][1]
zettel[1][0]
zettel[1]
zettel[0][1]
zettel[0][0]
zettel[0]
D ICTIONARIES
Syntax
Einschluss des Dictionaries in geschweifte
Klammern
Trennung der Einträge durch Komma
Jeder Eintrag entspricht der Form key : value
dct={k0:v0, k1:v1, k2:v2, … ,kn:vn}
weitere elegante Möglichkeiten zur Erzeugung von Dictionaries auf
http://tutorial.pocoo.org/datastructures.html?highlight=dictionary#dictionar
ies
49
D ATEN IN D ICTIONARIES
1. keys (Schlüssel)
dürfen jeweils nur einmal im Dictionary
vorkommen.
dürfen nicht veränderbar sein müssen also
immutablen Datentypen angehören.
(Zahlenwerte, Strings, Tupel mit ausschließlich immutablen
Elementen – Boolesche Werte werden wie 0 und 1 behandelt.)
dürfen innerhalb eines Dictionaries auch
unterschiedlichen Datentyps sein.
2. values (Werte)
dürfen mehrfach vorkommen.
sind von beliebigem Datentyp.
Z UGRIFF AUF D ICTIONARIES
Auslesen eines Wertes durch dict[key]
Hinzufügen eines Wertes durch Zuweisung
dict[key] = value
51
F UNKTIONEN UND O PERATOREN
max() und min() beziehen sich auf die
Keys.
Der in – Operator bezieht sich auf die Keys.
D ICTIONARIES .M ETHODEN () 1/3
dict.clear()
Entfernt alle Elemente des Dictionaries dict
dict.copy()
Erzeugt eine Kopie des Dictionaries dict
dict.update(dict2)
Fügt die Einträge des Dictionaries dict2 dem Dictionary
dict hinzu
dict.has_key(key)
Gibt True zurück, falls key im Dictionary; anderenfalls
False.
53
D ICTIONARIES .M ETHODEN () 2/3
dict.fromkeys(keyseq, default=None)
Erzeugt ein neues Dictionary aus Schlüsseln einer
Sequenz und einem vorgegebenen Wert.
dict.get(key, default=None)
Für key wird der Wert zurückgegeben; falls key nicht im
Dictionary ist, der default-Wert
54
D ICTIONARIES .M ETHODEN () 3/3
dict.items()
Gibt eine (spezielle) Liste aller Tupelpaare (key,value)
der Einträge des Dictionaries dict zurück.
dict.keys()
Gibt eine (spezielle) Liste aller Schlüssel des
Dictionaries dict zurück.
dict.values()
Gibt eine (spezielle) Liste aller Werte des Dictionaries
dict zurück.
Die Umwandlung in eine normale Liste kann jeweils per
Typecasting erfolgen.
55
M ENGENTYPEN
set
{el_1, el_2, …, el_n}
mutabler Datentyp
frozenset
({el_1, el_2, …, el_n})
immutabler Datentyp
Es stehen vorwiegend Methoden für
Mengenoperationen zur Verfügung.
A LGORITMIK
Python
V ORBEMERKUNGEN ZUR SYNTAX
Unterscheidung Groß- und Kleinschreibung
Zwang zum sauberen Programmierstil
nur ein Befehl pro Zeile
keine Semikola o. dgl.
Blöcke werden durch Einrückungen definiert
Keine {Klammern} oder BEGIN/END-Konstrukte
Kommentare:
V ORBEMERKUNG D ATENEIN - UND - AUSGABE
Dateneingabe mit der Funktion
input(string) string
Die Konvertierung in den Zieldatentyp kann
per Typecasting erfolgen.
Datenausgabe mit
print(Wert[e],sep =' ',end='\n')
S TEUERANWEISUNGEN
Verzweigung
if – else
if – elif – else
Es gibt keine Mehrfachverzweigung (case, switch)
try – except – else – finally zum Behandeln von
Exceptions
Schleifen
while / while … else
for / for … else
Es gibt keine weiteren Schleifenarten
(repeat-until, do-while)
V ERZWEIGUNGEN : S YNTAX
if bedingung:
<then-Anweisungsblock>
else:
<else-Anweisungsblock>
bedingung ist ein boolescher Ausdruck.
Die Einrückungen sind Element der Syntax.
Alle Anweisungen nach einem if oder else müssen
gleich tief eingerückt werden.
M EHRFACHVERZWEIGUNGEN ELSE IF ELIF
Mehrfachverzweigungen
sind beliebig tief
schachtelbar.
Problem: Quelltextbreite
else-if-Konstrukte
können durch elif
substituiert werden.
F EHLERBEHANDLUNG MIT TRY - EXCEPT - ELSE
Die Ausführung kritischen Codes unter Vorbehalt und das
Definieren einer Ausnahmeregelung verhindern einen
Programmabsturz.
try:
<< kritischer Code >>
# Ausführung , falls keine Exception
except:
# kritischer Code wird nicht ausgeführt
<< Verhalten des Programms bei Exception >>
else:
# nach bereits ausgeführtem kritischen Code
<< weiterer Code , der nur ausgeführt wird ,>>
<<wenn keine Exception erzeugt wurde >>
S CHLEIFE 1: WHILE
while bedingung:
<Schleifenkörper>
else:
<Anweisungsblock nach Schleifenende>
else
Der Block hinter else wird ausgeführt, wenn die
Schleife regulär beendet wird.
beendet die Schleife sofort ohne Ausführung des
else-Zweigs
continue unterbricht einen Schleifendurchlauf
break
S CHLEIFE 2: FOR - IN
for element in datenmenge:
<Schleifenkörper>
else:
<Anweisungsblock nach Schleifenende>
datenmenge
durch range-Funktion erzeugte Sequenz ganzer Zahlen ( int)
sequentieller Datentyp ( str, list, tuple)
Abbildungstyp (dict)
Mengentyp (set, frozenset)
element
sukzessives Durchlaufen aller Elemente der Datenmenge
S CHLEIFE 2: FOR – IN (B EISPIELE )
F UNKTIONEN
Syntax:
def funktionsname(parameter1, parameter2,…):
'''
DocString
'''
Anweisungsblock
eingerückt
return ergebnis
Funktionen innerhalb von Funktionen sind möglich
Zugriff auf globale Variablen auf Wunsch möglich.
def funktionsname(parameter1, parameter2,…):
global x
...
return ergebnis
F UNKTIONEN : W ISSENSWERTES ZU PARAMETERN
"Call by Value" für immutable Daten
(einfache Datentypen, Tupel)
"Call by Reference" für mutable Daten
(Listen)
F UNKTIONEN : W ISSENSWERTES ZU PARAMETERN
optionale
Parameter
F UNKTIONEN : W ISSENSWERTES ZU PARAMETERN
bezeichnete Parameter
F UNKTIONEN : R ÜCKGABEWERT ( E )
None bei fehlendem return
Mit einem Trick können beliebig viele Werte
innerhalb eines Tupels zurückgegeben
werden.
F UNKTIONEN : D OC S TRINGS
Docstrings dienen als Hilfetext bei Nutzung
von Funktionen.
F UNKTIONSBIBLIOTHEKEN
Sammlungen eigener wiederverwendbarer
Funktionen können in einer für Python
erreichbaren *.py-Datei gespeichert werden.
Der Nutzung in Programmen ist möglich in
der Form:
import meineFunktionen as mf
n = mf.gibZahlEin(von,bis)
F RÖSCHE UND
S CHILDKRÖTEN
GUI S GESTALTEN
mit tkinter
A BITUR 2009, A UFGABE 1.2.1/1.2.2
Um die Sicherheit in dem Möbelhaus und den
Warenlagern zu gewährleisten, müssen die
Mitarbeiter im Eingangsbereich einen
Zugangscode eingeben. Dieser Zugangscode
soll die vierstellige Zahl 4583 sein.
Entwickeln Sie ein Programm in der im
Unterricht verwendeten Programmiersprache,
das den eingegebenen Zugangscode auf
Richtigkeit prüft. (4)
Erweitern Sie das Programm so, dass nach
einer dreimaligen Prüfung der Vorgang
abgebrochen wird. (2)
G UI MIT TKINTER ERSTELLEN
tkinter ist Standardbibliothek für PythonGUI
Derzeit v. a. textbasierte Gestaltung der GUI
– Formdesigner wie in Delphi und Java
fehlen noch.
Viele andere Tools stehen noch nicht für
Python 3.x zur Verfügung.
A BI 2009
}
1.2.1/1.2.2
A BI 2009
}
1.2.1/1.2.2
B EMERKUNGEN ZUR OOP
K LASSENDEFINITION
Verzicht auf Schlüsselwörter für
Sichtbarkeitsattribute
attribut
(public)
_attribut
(protected – Empfehlung)
__attribut
(private)
Häufig auch in der Form
attribut
(public)
_attribut_
(protected – Empfehlung)
__attribut__ (private)
Methoden analog
K LASSENDEFINITION
Verzicht auf explizite Deklaration der
Attribute – stattdessen Deklaration durch
Wertzuweisung im Konstruktor
__init__(self, parameter)
Alle Objektmethoden und –attribute
werden mit dem Präfix self angesprochen.
Alle in der Klasse definierten Variablen sind
Klassenattribute (Präfix: Klassenname)
OOP: D AS K ONTOBEISPIEL IN P YTHON
Klassendefinition
Klassenvariable
Konstruktor
Destruktor
OOP: D AS K ONTOBEISPIEL IN P YTHON
getter
setter
OOP: D AS K ONTOBEISPIEL IN P YTHON
weitere
Methoden
OOP: D AS K ONTOBEISPIEL IN P YTHON
Erzeugen von
Objekten
Aufruf der
Methoden