TypeError: Super не принимает аргументы ключевого слова?
Во-первых, вот мой код:
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__
).
Ответы
Ответ 1
Аргументы родительского метода __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 выработает все остальное.
Вот некоторые ссылки на то, где это объясняется в документации:
Ответ 2
Вариант №1: Python 2.7x
Здесь вы можете передать self
keywork на super(), который по сути относится к свойствам экземпляра.
super(self, name="Wild Boar", hp=10, damage=2).__init__()
Вариант № 2: Python 3x
super()
больше не нужны никакие параметры, и вы можете просто написать
super().__init__("The Kidnappers", 30, 7)