まず、これが私のコードです:
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__
にあるのと同じ引数を渡しました)。
親の___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は残りを解決します。
これがドキュメントで説明されている場所へのリンクは次のとおりです。