PlusPedia wird derzeit technisch modernisiert. Aktuell laufen Wartungsarbeiten. Für etwaige Unannehmlichkeiten bitten wir um Entschuldigung; es sind aber alle Artikel zugänglich und Sie können PlusPedia genauso nutzen wie immer.
Neue User bitte dringend diese Hinweise lesen:
Anmeldung - E-Mail-Adresse Neue Benutzer benötigen ab sofort eine gültige Email-Adresse. Wenn keine Email ankommt, meldet Euch bitte unter NewU25@PlusPedia.de.
Hinweis zur Passwortsicherheit:
Bitte nutzen Sie Ihr PlusPedia-Passwort nur bei PlusPedia.
Wenn Sie Ihr PlusPedia-Passwort andernorts nutzen, ändern Sie es bitte DORT bis unsere Modernisierung abgeschlossen ist.
Überall wo es sensibel, sollte man generell immer unterschiedliche Passworte verwenden! Das gilt hier und im gesamten Internet.
Aus Gründen der Sicherheit (PlusPedia hatte bis 24.07.2025 kein SSL | https://)
Bei PlusPedia sind Sie sicher: – Wir verarbeiten keine personenbezogenen Daten, erlauben umfassend anonyme Mitarbeit und erfüllen die Datenschutz-Grundverordnung (DSGVO) vollumfänglich. Es haftet der Vorsitzende des Trägervereins.
PlusPedia blüht wieder auf als freundliches deutsches Lexikon.
Wir haben auf die neue Version 1.43.3 aktualisiert.
Wir haben SSL aktiviert.
Hier geht es zu den aktuellen Aktuelle Ereignissen
Programmieren für Anfänger in Python/Statische Typen
Das Konzept der statischen Variable ist relativ wichtig - Daher hier ein paar Anmerkungen.
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.
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.
Links und Quellen
Siehe auch
Weblinks
Quellen
Literatur
Einzelnachweise
Andere Lexika
Wikipedia kennt dieses Lemma (Programmieren für Anfänger in Python/Statische Typen) vermutlich nicht.