2016-10-23 3 views
-3
class Player: 
    def __init__(self): 
     self.speed 
     self.hp 
def Berserker(self): 
    self.speed == 12 
    self.hp == 6 

print("Berserkers stats are: " + Berserker()) 

Итак, что я сделал не так? Как вы можете видеть, я очень новичок в Python. Ошибка, которую я получаю: ТипError: Berserker() отсутствует 1 требуемый позиционный аргумент: 'self'Где это произошло в моем коде?

+2

Ваш '__init__' не d o что угодно. Он также выдает «AttributeError» при попытке создать экземпляр вашего класса. Вы должны начать с основного учебника Python, а затем перейти к ООП. –

+1

И ваш метод «Берсерк» не имеет правильного отложения в вашем классе, поэтому он не обрабатывается как метод экземпляра, а функция. – idjaw

+1

Возможно, вы имели в виду, что a berserker является подклассом или экземпляром человека? Потому что это совсем не то, что вы написали. – jonrsharpe

ответ

1

Вам не хватает всего нескольких вещей, но я вам поможем!

Ваш __init__ функция ничего не делает. Давайте дадим ему базовую статистику. Я скажу, что скорость и здоровье по умолчанию Player будут соответственно 10 и 100. Затем мы сделаем Berserker a подкласс of 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. 

Надеюсь, это даст вам хорошее место для начала!

1

Вы сделали кучу ошибок там:

  • Отступа вашего метод Берсерк будет частью класса
  • в питоне присваивания является одним «=» не с «==» (как и большинство программ языки)
  • Дайте начальные значения скорости и hp или не помещайте их в конструктор вообще, в переменных python создаются, когда им присваивается значение.
  • Сделайте свой метод Берсерк возвращает строку, чтобы иметь возможность печатать
  • Создание экземпляра класса

рабочая версия вами код должен быть таким:

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

сейчас это рабочая версия, но она по-прежнему плохо разработана IMO, это лучше:

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) 
Смежные вопросы