Python __iadd__ TypeError: неподдерживаемые типы операндов для + = - PullRequest
0 голосов
/ 18 июня 2020

Я создаю программу моделирования битвы. Запуск в TypeError. Невозможно решить. Любая помощь будет оценена. Кажется, я не могу заставить работать функцию iadd. Я пытаюсь добавить новые объекты Pokemon к существующему объекту PokemonTrainer, используя функцию iadd в python. У кого-нибудь есть идеи, как это выполнить?

main.py

name = input("State your name: ")
player = PokemonTrainer(name)

player += Pokemon("Staryu", ElementType.WATER, [
    Move("water blast", ElementType.WATER, 5),
    Move("water cyclone", ElementType.WATER, 6)
    ])

pokemon_trainer.py

Для iadd я использую диспетчеризацию на основе типа для работы с параметром . Если это тип Pokemon, вызовите метод add_pokemon для себя, а затем верните объект self. Если он имеет тип Item, вызовите метод add_item для self и затем верните объект self. В противном случае создайте ошибку TypeError.

from pokemon import Pokemon

class PokemonTrainer:

    def __init__(self, name, pokemon = [], items = [], current_active_pokemon = None):
        self.name = name
        self.pokemon = pokemon
        self.items = items
        self.current_active_pokemon = current_active_pokemon


    def __iadd__(self, other):

        self.pokemon.append(other)

        if (type(other) == type(Pokemon)):
            self.add_pokemon(other)

        elif (type(other) == type(Item)):
            self.add_item(other)

        else:
            raise TypeError("Only Pokemon or Item type are allowed")

        return self

    def add_pokemon(self, pkmn):

        self.pokemon.append(pkmn)

        if (self.current_active_pokemon == None):
            self.current_active_pokemon = pkmn


    def add_item(self, item):

        self.items.append(item)

pokemon.py

class Pokemon:

    def __init__(self, name, pokemon_type, moves):
        self.name = name
        self.pokemon_type = pokemon_type
        self.moves = moves

        self.level = 1
        self.exp = 0
        self.max_hp = 100
        self.current_hp = self.max_hp
        self.attack_power = 1
        self.defense_power = 1
        self.fainted = False

1 Ответ

0 голосов
/ 18 июня 2020

Думаю, вы хотите isinstance(other, Pokemon) вместо type(other) == type(Pokemon).

https://docs.python.org/3/library/functions.html#isinstance

Также здесь актуально: Каковы различия между типами () и isinstance ()?

...