关于python:TypeError:Super不接受关键字参数?

TypeError: Super does not take Key word arguments?

首先,我的代码是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Enemy():
    def __init__(self, name, hp, damage):
        self.name = name
        self.hp = hp
        self.damage = damage


    def is_alive(self):
       """Checks if alive"""
        return self.hp > 0

class WildBoar(Enemy):
    def __init__(self):
        super(WildBoar, name="Wild Boar", hp=10, damage=2).__init__()

class Marauder(Enemy):
    def __init__(self):
        super(Marauder, name="Marauder", hp=20, damage=5).__init__()


class Kidnappers(Enemy):
    def __init__(self):
        super(Kidnappers, name="The Kidnappers", hp=30, damage=7).__init__()

当我编译这个时,我得到了这个错误:

1
2
super(WildBoar, name="Wild Boar", hp=10, damage=2).__init__()
TypeError: super does not take keyword arguments

我四处寻找帮助,但什么也找不到。我在其他班级的超级市场上也有一些关卡,但这些都是引发任何问题的关卡(目前为止)。那么是什么导致了这一切呢?我还看到有人说将super放在基类中可以修复它,但它不起作用(我传递的参数与基类的__init__中的参数相同)。


父级的__init__方法的参数应传递给__init__方法:

1
2
3
super(Kidnappers, self).__init__(name="The Kidnappers", hp=30, damage=7)
# or
super(Kidnappers, self).__init__("The Kidnappers", 30, 7)

您所传递给super()的只是子类(本例中的Kidnappers和当前实例的引用(self)。

但是请注意,如果您使用的是python 3.x,那么您需要做的就是:

1
super().__init__("The Kidnappers", 30, 7)

而python将解决剩下的问题。

以下是一些链接,指向文档中解释的位置:

  • python 2.x super()
  • python 3.x super()


选项1:python 2.7x

在这里,您可以将selfkeywork传递给super(),super()本身就是引用实例属性的。

1
super(self, name="Wild Boar", hp=10, damage=2).__init__()

选项2:python 3x

super()不再需要任何参数,只需编写

1
super().__init__("The Kidnappers", 30, 7)