web-dev-qa-db-ja.com

TypeError:スーパーはキーワード引数を取りませんか?

まず、これが私のコードです:

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

何か助けを探してみましたが、何も見つかりませんでした。私は他のクラスのスーパーにもいくつかのKwargsを持っていますが、これらはあらゆる種類の問題を引き起こしているものです(現時点で)。では、何がこれを引き起こしているのでしょうか?また、基本クラスにsuperを入れると修正されると誰かが言うのを見たことがありますが、機能しませんでした(基本クラスの__init__にあるのと同じ引数を渡しました)。

16
Scoutdrago3

親の___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)だけです。


ただし、Python 3.xを使用している場合は、次のことを行う必要があることに注意してください。

_super().__init__("The Kidnappers", 30, 7)
_

そしてPythonは残りを解決します。


これがドキュメントで説明されている場所へのリンクは次のとおりです。

17
user2555451