我试图自学python中的super()和类继承,但没有成功。根据下面的代码,有人能告诉我为什么我期望发生的事情…不是吗?你知道吗
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, ")"
为什么此代码输出:
( 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 )
而不是预期的:
( 2 goblin 0.1 80 )
( 5 goblin 0.25 200 )
( 3 goblin 0.15 120 )
( 5 goblin 0.25 200 )
您正在传递一个
Enemy
对象作为名称调用
createEnemy
,传入一个Enemy
。在createEnemy
内部,您传递该敌方对象作为第一个参数来创建另一个Enemy
(第一个参数应该是一个名称)。你知道吗您传递的不是
name
的字符串,而是一个敌方对象。执行顺序为:那么
那么
此时
name
不是一个字符串,而是一个敌方对象。你知道吗在此行中传入的
enemy
:也许你想要的是:
相关问题 更多 >
编程相关推荐