Я создаю программу моделирования битвы. Запуск в 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