Programmieren für Anfänger in Python/Statische Typen
Das Konzept der statischen Variable ist relativ wichtig - Daher hier ein paar Anmerkungen.
Inhaltsverzeichnis
Übrigens: Die PlusPedia ist NICHT die Wikipedia. Wir sind ein gemeinnütziger Verein, PlusPedia ist werbefrei. Wir freuen uns daher über eine kleine Spende! |
1 Allgemein
Man stelle sich vor eine Klasse:
class CStudent:
i_anzahl_der_studenten = 0;
def StatischeMethode(): # begin
print ("Ich gehöre keinem Objekt");
#enddef StatischeMethode()
def immatrikulieren(self): # begin
CStudent.i_anzahl_der_studenten = CStudent.i_anzahl_der_studenten + 1;
#enddef immatrikulieren();
def exmatrikulieren(self): # begin
CStudent.i_anzahl_der_studenten = CStudent.i_anzahl_der_studenten - 1;
pass; #enddef exmatrikulieren
pass; #end class CStudent
student_claudia_mit_c = CStudent();
student_klaudia_mit_k = CStudent();
student_anton = CStudent();
student_berta = CStudent();
print(student_claudia_mit_c.i_anzahl_der_studenten);
print(CStudent.i_anzahl_der_studenten);
student_claudia_mit_c.immatrikulieren();
print("Claudia mit c:", student_claudia_mit_c.i_anzahl_der_studenten);
print("Klasse:", CStudent.i_anzahl_der_studenten);
student_anton.immatrikulieren();
print("Claudia mit c:", student_claudia_mit_c.i_anzahl_der_studenten);
print("Anton :", student_anton.i_anzahl_der_studenten);
print("Klasse:", CStudent.i_anzahl_der_studenten);
CStudent.StatischeMethode();
- Das folgende geht nicht:
student_claudia_mit_c.StatischeMethode();
liefert folgendes Ergebnis:
>>> ================================ RESTART ================================
>>>
0
0
Claudia mit c: 1
Klasse: 1
Claudia mit c: 2
Anton : 2
Klasse: 2
Ich gehöre keinem Objekt
Traceback (most recent call last):
File "C:/Python32/ante/tests/Studenten_Static.py", line 35, in <module>
student_claudia_mit_c.StatischeMethode();
TypeError: StatischeMethode() takes no arguments (1 given)
>>>
Daraus ergibt sich folgendes.
Mit einer statischen Variable lässt sich ein Zustand über alle Objekte hinweg retten. Wenn ein Objekt verschwindet, so bleibt der Zustand der statischen Variable erhalten.
In diesem Fall nutzen wir die Statische Variable, um die Anzahl der Studenten zu zählen.
1.1 Erste Gefahr
1. Gefahr, die mir aufgefallen ist:
class CStudent:
i_anzahl_der_studenten = 0;
def StatischeMethode(): # begin
print ("Ich gehöre keinem Objekt");
#enddef StatischeMethode()
def immatrikulieren(self): # begin
print ("Immatrikulieren");
CStudent.i_anzahl_der_studenten = CStudent.i_anzahl_der_studenten + 1;
#enddef immatrikulieren();
def exmatrikulieren(self): # begin
print ("Exmatrikulieren");
CStudent.i_anzahl_der_studenten = CStudent.i_anzahl_der_studenten - 1;
pass; #enddef exmatrikulieren
def ich_bin_superdoof(self): #begin
print("Es geht - aber klug ist es nicht.");
self.i_anzahl_der_studenten = self.i_anzahl_der_studenten + 1;
pass; #enddef
pass; #end class CStudent
student_claudia_mit_c = CStudent();
student_klaudia_mit_k = CStudent();
student_anton = CStudent();
student_xeenaaaiad = CStudent();
print(student_claudia_mit_c.i_anzahl_der_studenten);
print(CStudent.i_anzahl_der_studenten);
student_claudia_mit_c.immatrikulieren();
print("Claudia mit c:", student_claudia_mit_c.i_anzahl_der_studenten);
print("Klasse:", CStudent.i_anzahl_der_studenten);
student_anton.immatrikulieren();
print("Claudia mit c:", student_claudia_mit_c.i_anzahl_der_studenten);
print("Anton :", student_anton.i_anzahl_der_studenten);
print("Klasse:", CStudent.i_anzahl_der_studenten);
student_xeenaaaiad.immatrikulieren();
print("Claudia mit c:", student_claudia_mit_c.i_anzahl_der_studenten);
print("Anton :", student_anton.i_anzahl_der_studenten);
print("xeenaaaiad :", student_xeenaaaiad.i_anzahl_der_studenten);
print("Klasse:", CStudent.i_anzahl_der_studenten);
student_xeenaaaiad.ich_bin_superdoof();
print("Claudia mit c:", student_claudia_mit_c.i_anzahl_der_studenten);
print("Anton :", student_anton.i_anzahl_der_studenten);
print("xeenaaaiad :", student_xeenaaaiad.i_anzahl_der_studenten);
print("Klasse:", CStudent.i_anzahl_der_studenten);
Python erlaubt uns die statische Variable mit self.Variable zu ändern.
Dies führt dazu, dass das Konzept der statischen Variable aber ausgehebebelt wird - und kann zu merkwürdigen Ergebnissen führen:
>>> ================================ RESTART ================================
>>>
0
0
Immatrikulieren
Claudia mit c: 1
Klasse: 1
Immatrikulieren
Claudia mit c: 2
Anton : 2
Klasse: 2
Immatrikulieren
Claudia mit c: 3
Anton : 3
xeenaaaiad : 3
Klasse: 3
Es geht - aber klug ist es nicht.
Claudia mit c: 3
Anton : 3
xeenaaaiad : 4
Klasse: 3
>>>
Aus diesem Grunde sollte man in einer Klasse bei statischen Variablen folgendes vermeiden:
def doofer_schritt(self): #begin
self.i_static_anzahl_der_studenten = self.i_static_anzahl_der_studenten + 1;
pass; #enddef
Das bringt das Konzept der statischen Variablen durcheinander.
Statische Typen | Objektorientierung | OO-Design |
2 Links und Quellen
2.1 Siehe auch
2.2 Weblinks
2.3 Quellen
2.4 Literatur
2.5 Einzelnachweise
3 Andere Lexika
Wikipedia kennt dieses Lemma (Programmieren für Anfänger in Python/Statische Typen) vermutlich nicht.
Hast du einen Löschwunsch oder ein anderes Anliegen? Dann nutze bitte unser Kontaktformular
PlusPedia Impressum
Bitte Beachte:
Sämtliche Aussagen auf dieser Seite sind ohne Gewähr.
Für die Richtigkeit der Aussagen übernimmt die Betreiberin keine Verantwortung.
Nach Kenntnissnahme von Fehlern und Rechtsverstößens ist die Betreiberin selbstverständlich bereit,
diese zu beheben.
Verantwortlich für jede einzelne Aussage ist der jeweilige Erstautor dieser Aussage.
Mit dem Ergänzen und Weiterschreiben eines Artikels durch einen anderen Autor
werden die vorhergehenden Aussagen und Inhalte nicht zu eigenen.
Die Weiternutzung und Glaubhaftigkeit der Inhalte ist selbst gegenzurecherchieren.