Ich versuche, mich selbst über Super() und Klassenvererbung in Python ohne Erfolg zu unterrichten. Kann mir jemand mit dem folgenden Code sagen, warum das, was ich erwarte, nicht wahr ist?Python Klassenvererbung und Super() Verhalten?
import random
enemy_list = []
class Entity(object):
def __init__(self, name=''):
self.name = name
self.health = 1
self.attack_power = .05
class Enemy(Entity):
def __init__(self, name, target):
super(Enemy, self).__init__(name)
self.lvl = random.randint(target.lvl - 2, target.lvl + 2)
self.health *= self.lvl * target.health
self.attack_power *= self.lvl
def createEnemy(enemy):
enemy_list.append(Enemy(enemy, player))
return enemy_list
enemy_amount = random.randint(1, 5)
while enemy_amount > 0:
createEnemy(Enemy("goblin", player))
enemy_amount -= 1
for i in enemy_list:
print "(", i.lvl, i.name, i.attack_power, i.health, ")"
Warum ist dieser Code Ausgabe:
(2 <__main__.Enemy object at 0x7faa040b3050> 0.1 80)
(5 <__main__.Enemy object at 0x7faa040b30d0> 0.25 200)
(3 <__main__.Enemy object at 0x7faa040b3150> 0.15 120)
(5 <__main__.Enemy object at 0x7faa040b31d0> 0.25 200)
Statt der erwarteten:
(2 goblin 0.1 80)
(5 goblin 0.25 200)
(3 goblin 0.15 120)
(5 goblin 0.25 200)
Was ist 'player', wenn man davon ausgeht, dass es sich um' Enemy' handelt? – edhurtig
@edhurtig Spieler ist eine andere Instanz von Entity, ziemlich ähnlich Code zu was in der Enemy-Klasse gezeigt, aber mit anderen Mathe (kein Ziel, Daten von Basis) – user6195779
Hoffentlich macht das Sinn, weil ich wenig Ahnung habe, wovon ich spreche ... Ich benutze es nur hier, um den Level des Feindes zu bestimmen und seine Attribute abhängig von diesem Level anzupassen. – user6195779