在Python中初始化对象并分配给引用

时间:2017-01-27 21:48:58

标签: python oop

我是一名C ++和C#程序员,因为上学,我正在转向Python。我在使用面向对象原则制作的游戏中遇到了错误。下面是代码:

class Entity(object):
  def __init__(self, name, hp):
    self.name = name
    self.hp = hp

  def attack(self, attack_name):
    pass

  def set_name(self, name):
    self.name = name

class Enemy(Entity):
  def __init__(self, name, hp):
    super(Enemy, self).__init__(name, hp)
    self.attacks = {} # creates a DICTINARY of attacks

  def add_attack(self, attack_name, attack_damage):
    self.attacks[attack_name] = attack_damage

  def attack(self, attack_name):
    if self.attacks[attack_name] == None:
      print("Attack not availible.")

    print(self.name + " is attacking with attack " + attack_name + " with " + self.attacks[attack_name])
    return self.attacks[attack_name]

  new_enemy = Enemy("Waddle Doo", 140)

  new_enemy.add_attack("Shoot Beam", 55)

  new_enemy.attack("Shoot Beam")

我创建了一个继承自 Entity 类的类,名为 Enemy 。然后我尝试启动一个敌人对象,但它给了我错误: NameError:名称'Enemy'未定义。为什么会这样?是否必须对构造函数在Python中的工作方式做些什么?如果你可以帮助解决这个看似很小的问题,我非常感谢你。

1 个答案:

答案 0 :(得分:2)

这是你的缩进。

new_enemy = Enemy("Waddle Doo", 140)

new_enemy.add_attack("Shoot Beam", 55)

new_enemy.attack("Shoot Beam")

你在Enemy类的范围内声明了上述内容。将它们移回到Enemy(Entity)类的级别:line