Ich heisse Christian und habe vor kurzer Zeit, als Hobby, angefangen, Python im Selbststudium zu lernen.
Das schwierigste für absolute Beginner wie mich ist ganz klar das objektorientierte Design. Testweise habe ich mir ein kleines Programm zusammengebastelt.
Kurze Erklärung:
Mit rambo = Soldier('Rambo') wird ein Objekt der Klasse Soldier mit dem Namen Rambo erzeugt.
rambo.addWeapon() fügt dann dem Objekt eine Objekt der Klasse Weapon hinzu
rambo.info() zeigt Informationen über den Soldaten Rambo
rambo.shoot(rambo) lässt rambo auf sich selbst schiessen.
Problem:
In der Klasse Weapon liegt in der Methode def __init__ noch ein Fehler. Bei self.shooter würde ich gerne anstelle des Objekts keusch einfach das Objekt(Typ Soldier) übergeben, welches
die Methode pulltriger aufruft, so dass die anschliessende Textausgabe korrekt ist.
Wenn sich jemand die Zeit nimmt, mein Programm kurz anzuschauen und mir zu sagen, ob ich damit überhaupt auf dem richtigen Weg bin oder ich es auch objektorientierter Sicht
anderst hätte schreiben sollen, dann wäre ich sehr dankbar.
Gruss
Christian
Code: Alles auswählen
class Soldier(object):
def __init__(self, name):
self.name = name
self.health = 100
self.weapon = []
def info(self):
f = "{:15}|{:<15}"
seperation_line = (29 * "-")
print (seperation_line)
print ("SOLDAT")
print (f.format("Name", self.name))
print (f.format("Leben", self.health))
print (seperation_line)
print ("WAFFE")
if self.weapon:
print (f.format("Name", self.weapon[0].name))
print (f.format("Munition", self.weapon[0].munition))
print (f.format("Schaden", self.weapon[0].damage))
else:
print ("{} hat keine Waffe,\nmit Ausnahme seines Sackmessers").format(self.name)
def shoot(self, target):
self.target = target
if self.weapon:
self.weapon[0].pulltriger(self.target)
else:
print ("{} hat keine Waffe,\nmit Ausnahme seines Sackmessers").format(self.name)
def addWeapon(self):
self.weapon.append(Weapon())
print ("{} ist nun mit einem {} mit {} Munition und {} Schaden ausgeruestet").format(self.name, self.weapon[0].name, self.weapon[0].munition, self.weapon[0].damage)
def disarm(self):
self.weapon = []
print ("{} wurde entwaffnet und besitzt nur noch ein Sackmesser").format(self.name)
class Weapon(object):
def __init__(self):
self.name = 'Assault Rifle'
self.munition = 20
self.damage = 25
self.shooter = keusch #hier liegt noch ein Fehler, ich setze hier manuell self.shooter = objekt keusch....wie kann ich objekt keusch durch den aufruf durch add weapon uebergeben?
def pulltriger(self, target):
target.health -= self.damage
self.munition -= 1
print ("{} feuert mit seiner {}").format(self.shooter.name, self.shooter.weapon[0].name)
print ("{} wurde getroffen und hat noch {} Leben").format(target.name, target.health)
#Generate a Soldier named Rambo
rambo = Soldier('Rambo')
#Generate a Soldier named Keusch and add a Weapon
keusch = Soldier('Keusch')
keusch.addWeapon()