OOP in Python - kleines Beispiel
Verfasst: Donnerstag 18. August 2011, 19:34
Servus, in meinem Buch wird ein kleines Spiel entwickelt und ich wundere mich über einige Bestandteile des Codes. Erstens: ich bin überrascht, dass im Tutorial Instanzattribute nicht explizit irgendwo formuliert werden. Die Klassen stehen hier in einer Datei, ich las aber, dass es Module und gar Packages gibt. Module sollen knapp beschrieben werden, Klassen mit CamelCase. Ist es in Python verbreitet, dass jede Klasse in einer eigenen Datei steht. Wie werden umfassendere mit OOP umgesetzte Bibliotheken realisiert ... nutzt man da diese Packages oder schreibt man mehrere Klassen in eine Datei. Ich habe es noch nicht probiert, aber wie löst Python die Sache mit der Bekanntheit in Klassen, es ist ja interpretiert und wie macht man es wenn die eine Klasse die andere braucht, gibts da irgendwie Probleme mit Mehrfacheinbindung wie in C++, ein Sprachkonstrukt fand ich in Python da nicht ... scheint also irgendwie anders gelöst worden zu sein. Danke vorab für einige Anmerkungen ... ich setze nun mal eine kleine Gui an das Snippet da unten.
Code: Alles auswählen
#!/usr/bin/python3
import random
# MathTask #####################################################################
class MathTask:
def __init__(self, i, anzahl):
self.nr = i
self.gesamt = anzahl
def __str__(self):
a = random.randint(10,30)
b = random.randint(10,30)
self.ergebnis = a + b
return "Aufgabe " + str(self.nr) + " von " + str(self.gesamt) + " : " + str(a) + " + " + str(b)
def beantworten(self):
try:
if self.ergebnis == int(input()):
print(self.nr, ": *** Richtig ***")
return 1
else:
raise
except:
print(self.nr, ": *** Falsch ***" )
return 0
# Game #########################################################################
class Game:
def __init__(self):
random.seed()
self.richtig = 0
self.anzahl = -1
while self.anzahl<0 or self.anzahl>10:
try:
print("Wie viele Aufgaben (1 bis 10):")
self.anzahl = int(input())
except:
continue
def spielen(self):
for i in range(1,self.anzahl+1):
a = MathTask(i,self.anzahl)
print(a)
self.richtig += a.beantworten()
def __str__(self):
return "Richtig: " + str(self.richtig) + " von " + str(self.anzahl)
# main #########################################################################
print( "Zahlenspiel nach Thomas Theis, Python-Tutorial" )
s = Game()
s.spielen()
print(s)