SubClass

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
tmant
User
Beiträge: 1
Registriert: Montag 10. Dezember 2018, 11:13

hallo ich habe ein Problem und zwar, habe ich eine Super Class erstellt und dadurch konnte ich mehrere Sub Classes erstellen jede einzelen Sub Class hat spezielle Funktionen. In der eint Sub Class habe ich eine funktion geschrieben inder ich mit Choice, zufällig eine der vorherigen funktionen aussuchen kann. So nun zu Problem: in dem Hauptsächlchem Programm verwende ich also die funktion der Sub Class. Das Problem ist aber, dass es nicht eine Funktion auswählt, sonder einfach alle alle Funktionen ausführt.
Was könnte mein fehler sein?

Code:
Sub Classe:
def gibRandomAttackeK(self, gegner):
alleAttacken = [self.doChakraPunch(self, gegner), self.doChidori(self, gegner), self.doKirin(self, gegner), self.doRaikiri(self, gegner), self.doRasengan(self, gegner), self.doSchattendoppelgänger(self, gegner)]
attacke = random.choice(alleAttacken)
return attacke



Code Program:
if Player.leben > 0 or com.leben > 0:
Attacke = input("Choose an Attack >")
if Attacke == "Rasengan" or "rasengan":
Player.doRasengan(Player, com)
com.gibRandomAttackeK(com, Player)
print("Player Life: ", Player.leben)
print("Player Chakra: ", Player.ausdauer)
print("Player Speed: ", Player.geschwindigkeit)
print("Player Resistance: ", Player.resistenz)
print("Com Life: ", com.leben)
print("Com Chakra: ", com.ausdauer)
print("Com Speed: ", com.geschwindigkeit)
print("Com Resistance: ", com.resistenz)
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

Das mit den Subklassen habe ich nicht verstanden, weil Du hier ja gar keine Vererbung benutzt. Statt die Funktionen aufzurufen, darfst Du nur die Funktionsobjekte in die Liste schreiben und von dort eine Auswählen, die Du zurückgibst und dann im Hauptprogramm aufrufst. `gegner` ist daher auch als Argument überflüssig.
In if-Attacke benutzt Du `or` falsch. In diesem Fall solltest Du den `in`-Operator benutzen.

Nach Konvention werden alle Variablen klein geschrieben, nur Klassen haben einen großen Anfangsbuchstaben. `Player` ist daher sehr verwirrend, weil es so aussieht, als ob Du mit der Klasse arbeitest.
Benutzeravatar
__blackjack__
User
Beiträge: 13003
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Es ist auch ein bisschen schräg einer Methode die ja sowieso schon das Objekt auf dem sie Aufgerufen wird, noch mal als weiteres Argument mitzugeben.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Antworten