Как я могу исправить «TypeError» в Python? - PullRequest
0 голосов
/ 05 апреля 2020

Я совершенно новичок в Python, только что начал изучать несколько дней go, и я попытался сделать простой RPG-код, но недавно я столкнулся с ошибкой, она продолжает возвращать мне TypeError: generate_damage ( ) отсутствует 1 обязательный позиционный аргумент: «я». Кто-нибудь знает, что происходит?

Main.py

from Classes.game import player, bcolors

magic = [{"name": "Tackle", "cost": 1, "dmg": 4},
         {"name": "Ember", "cost": 3, "dmg": 6},
         {"name": "Leech", "cost": 4, "hp": +5, "dmg": 4},
         {"name": "Explosion", "cost": 5, "hp": -10, "dmg": 30}]

player(100, 20, 5, 10,magic)

print(player.generate_damage())

Game.py

import random 

class bcolors:
    HEADER = '\033[95m'
    OKBLUE = '\033[94m'
    OKGREEN = '\033[92m'
    WARNING = '\033[93m'
    FAIL = '\033[91m'
    ENDC = '\033[0m'
    BOLD = '\033[1m'
    UNDERLINE = '\033[4m'

class player:
    def __init__(self, hp, mp, atk, df, mag):
        self.maxhp = hp
        self.hp = hp
        self.maxmp = mp
        self.mp = mp
        self.atkw = atk - 10
        self.atks = atk + 10
        self.df = df
        self.mag = mag
        self.actions = ["Attack", "Magic"]

    def generate_damage(self):
        return random.randrange(self.atkw, self.atks)

I У меня проблемы с:

print(player.generate_damage())

Поскольку он продолжает возвращать TypeError: generate_damage () отсутствует 1 обязательный позиционный аргумент: 'self'

Ответы [ 4 ]

1 голос
/ 05 апреля 2020

Поскольку generate_damage является методом класса Player, вы можете запустить его только на экземпляре игрока. Попробуйте это:

p = Player(100, 20, 5, 10, magic) # init object p of class player

print(p.generate_damage())
0 голосов
/ 05 апреля 2020

Вы вызываете метод экземпляра с именем класса, вам нужно создать экземпляр этого класса проигрывателя, а затем вызвать метод экземпляра. Правильный код для вашего main.py будет:

from game import player, bcolors

magic = [{"name": "Tackle", "cost": 1, "dmg": 4},
         {"name": "Ember", "cost": 3, "dmg": 6},
         {"name": "Leech", "cost": 4, "hp": +5, "dmg": 4},
         {"name": "Explosion", "cost": 5, "hp": -10, "dmg": 30}]

p = player(100, 20, 5, 10,magic)

print(p.generate_damage())
0 голосов
/ 05 апреля 2020

Вы должны создать экземпляр класса, чтобы использовать его метод класса

magic = [{"name": "Tackle", "cost": 1, "dmg": 4},
         {"name": "Ember", "cost": 3, "dmg": 6},
         {"name": "Leech", "cost": 4, "hp": +5, "dmg": 4},
         {"name": "Explosion", "cost": 5, "hp": -10, "dmg": 30}]

p = player(100, 20, 5, 10,magic)

print(p.generate_damage())
0 голосов
/ 05 апреля 2020

Сначала необходимо создать экземпляр player.

class Player:   # Note how I have changed the class to have an upper case P
    def __init__(self, hp, mp, atk, df, mag):
        self.maxhp = hp
        self.hp = hp
        self.maxmp = mp
        self.mp = mp
        self.atkw = atk - 10
        self.atks = atk + 10
        self.df = df
        self.mag = mag
        self.actions = ["Attack", "Magic"]

    def generate_damage(self):
        return random.randrange(self.atkw, self.atks)

player = Player(100, 20, 5, 10,magic)
print(player.generate_damage())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...