python - Python __iadd__ TypeError:+= 不支持的操作数类型
问题描述
我正在构建一个战斗模拟程序。遇到类型错误。无法解决。任何帮助,将不胜感激。我似乎无法让 iadd 功能正常工作。我正在尝试使用 python 中的 iadd 函数将新的 Pokemon 对象添加到现有的 PokemonTrainer 对象中。有人对如何执行此操作有任何想法吗?
主文件
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 类型,在 self 上调用 add_pokemon 方法,然后返回 self 对象。如果是Item类型,调用self的add_item方法,然后返回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)
口袋妖怪.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
解决方案
我猜你想要isinstance(other, Pokemon)
而不是type(other) == type(Pokemon)
.
推荐阅读
- python - 如何在 Python 中基于现有列创建新列
- powershell - 将对象从一个脚本传递到另一个
- python - 如何在 TensorFlow 中高效地实现这个简单的结构
- powershell - Powershell 正在输出一个无法运行的批处理文件
- apache-beam - 在 DoFn 中访问管道
- jython - 如何在 Sikuli 中指定没有绝对路径的目录
- c# - 如何在使用 C# 标记的构建输出中像往常一样引用文件?
- javascript - 原型中的“this”指的是什么?
- html - 悬停在链接上时,希望将链接向左移动而不移动边框
- c# - 想要写入文件但我收到失败“访问路径 xy 被拒绝”。