TypeError:超不能使用关键字参数?

2024-05-12 21:01:03 发布

您现在位置:Python中文网/ 问答频道 /正文

首先,这是我的代码:

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__()

当我编译此文件时,会出现以下错误:

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

我试着四处寻找帮助,但什么也找不到。我在另一个班级的超级教室里也有一些夸尔格语,但这些是引起任何问题的原因(目前为止)。那是什么导致的呢?我还看到有人说,在基类中放一个super可以修复它,但它没有起作用(我传入的参数与基类的__init__中的参数相同)。


Tags: nameselfinitdefclasshpsuperdamage
2条回答

选项1:Python 2.7x

在这里,您可以将selfkeywork传递给super(),super()固有地引用实例属性。

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

选项2:Python 3x

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

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

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

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

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


不过,请注意,如果您使用的是Python3.x,则只需执行以下操作:

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

剩下的部分由Python来解决。


以下是文档中对此进行说明的一些链接:

相关问题 更多 >