#python #python-3.x
#python #python-3.x
Вопрос:
class Player:
def __init__(self):
self.speed
self.hp
def Berserker(self):
self.speed == 12
self.hp == 6
print("Berserkers stats are: " Berserker())
Итак, что я сделал не так? Как вы можете видеть, я совсем новичок в Python.
Ошибка, которую я получаю, такова: TypeError: в Berserker () отсутствует 1 требуемый позиционный аргумент: ‘self’
Комментарии:
1. Ваш
__init__
ничего не делает. Он также выдастAttributeError
при попытке создать экземпляр вашего класса. Вам следует начать с базового руководства по Python, а затем перейти к ООП.2. И ваш
Berserker
метод не имеет правильного отступа в вашем классе, поэтому он обрабатывается не как метод экземпляра, а как функция.3. Вы имели в виду, что berserker должен быть подклассом или экземпляром person? Потому что это совсем не то, что вы написали.
4. Как указывали другие, вы упускаете различные вещи. Кроме того, в SO это считается «плохим вопросом»; мы вроде как предпочитаем конкретные вопросы о том, как использовать язык или технологию, в отличие от «Что не так в этом коде?» (в чем заключается ваш вопрос). Однако, я думаю, для вас важнее изучить Python, чем то, как сформулировать «хороший» вопрос SO, поэтому я предоставил ответ. В будущем было бы полезно, если бы вы провели еще немного исследований и показали, где вы ранее обращались за помощью, прежде чем публиковать подобный вопрос. 🙂
Ответ №1:
Вы упускаете довольно много вещей, но я вам помогу!
Ваша __init__
функция ничего не делает. Давайте приведем некоторые базовые статистические данные. Я скажу, что скорость и работоспособность a Player
по умолчанию будут равны 10 и 100 соответственно. Затем мы создадим Berserker
подкласс Player
(я думаю, это то, к чему вы стремились?). И, наконец, я приведу Player
метод, который позволит вам получить выходные данные в формате строки для своих значений.
Во-первых, новый Player
:
class Player:
def __init__(self, speed=10, health=100):
self.speed = speed
self.health = health
def __str__(self):
return "A player with speed {} and health {}.".format(self.speed, self.health)
А теперь о Berserker
. Я дам ему базовую скорость 15 и работоспособность 85. (Очевидно, что конкретика зависит от вас!)
class Berserker(Player):
def __init__(self):
super().__init__(speed=15, health=85)
Наконец, мы можем создать их и распечатать значение. Я сделаю пару разных версий, чтобы вы могли увидеть, как это работает. (И для этого я буду использовать обычный интерпретатор Python).
>>> p1 = Player()
>>> p2 = Player(7, 120)
>>> b = Berserker()
>>> print(p1)
A player with speed 10 and health 100.
>>> print(p2)
A player with speed 7 and health 120.
>>> print(b)
A player with speed 15 and health 85.
Надеюсь, это даст вам хорошее начало!
Ответ №2:
Вы допустили там кучу ошибок :
- Сделайте отступ в своем методе Berserker, чтобы он был частью класса
- Назначение в python выполняется с помощью «=», а не с помощью «==» (как и в большинстве языков программирования на самом деле)
- Укажите начальные значения speed и hp или вообще не помещайте их в конструктор, в python переменные создаются, когда им присваивается значение.
- Сделайте так, чтобы ваш метод Berserker возвращал строку, чтобы можно было ее распечатать
- Создайте экземпляр вашего класса
рабочая версия вашего кода должна быть такой :
class Player:
def __init__(self):
self.speed = 0
self.hp = 0
def Berserker(self):
self.speed = 12
self.hp = 6
return "speed {} hp {}".format(self.speed,self.hp)
m = Player()
print("Berserkers stats are: " m.Berserker())
Теперь это рабочая версия, но она все еще плохо разработана, ИМО, это лучше :
class Player:
def __init__(self):
self.speed = 0
self.hp = 0
def Berserker(self):
self.speed = 12
self.hp = 6
def __str__(self):
return "speed {} hp {}".format(self.speed,self.hp)
m = Player()
m.Berserker()
print(m)