Convertir el tipo cadena de objeto al tipo objeto de clase en Python.
Tengo algo de código para un bot de Discord que estoy construyendo y quiero hacerlo más limpio. En lugar de escribir una nueva declaración if cuando se crea un nuevo enemigo, me gustaría comprobar si una entrada de usuario ya es un enemigo (objeto de clase) y luego realizar una acción en ese objeto de clase con el mismo nombre.
A continuación se muestra el código para construir un enemigo.
class EnemyCreator:
type = ‘enemy’
def init(self, name, enemy_type, health, ap):
self.name = name
self.enemy_type = enemy_type
self.health = health
self.ap = ap
info = (name + ‘, ‘ + str(health) + ‘, ‘ + str(ap))
npc_info.append(info)
Y aquí hay un ejemplo de enemigo:
skeleton = EnemyCreator(‘Randy Bones’, ‘skeleton’, 100, 2)
Tengo una función de ataque:
def attack(enemy):
enemy.health = enemy.health – playerChar.ap
if enemy.health > 0:
playerChar.health = playerChar.health – enemy.ap
return (‘Atacaste a ‘ + enemy.name + ‘. ‘ + str(enemy.health) + ‘ vida restante. \n’
+ enemy.name + ‘ te ataca de vuelta! Recibes ‘ + str(enemy.ap) + ‘ de daño. Te quedan ‘ + str(playerChar.health)
+ ‘ de vida!’)
if enemy.health <= 0:
return enemy.name + ‘ ha sido derrotado!’
if playerChar.health <= 0:
return ‘Mueres, idiota.’
Luego, el código verifica la entrada con este código:
async def on_message(message):
print(message.content)
if message.author != client.user:
if ‘test’ in message.content.lower():
print(npc_info)
if ‘!attack’ in message.content.lower():
await message.channel.send(
attack(message.content[8::))
Sin embargo, esto causa un problema porque el objeto que se pasa a la función attack(enemy) es una cadena, y necesito que sea un objeto de clase. ¿Alguna idea de cómo agregar esta funcionalidad?
davy.ai
Una forma de agregar esta funcionalidad es usar un ciclo
for
para iterar a través de la listanpc_info
y verificar si la entrada del usuario está en ella. Si lo está, puedes crear un nuevo objetoEnemyCreator
con los parámetros de la lista y pasarlo a la funciónattack()
.Por ejemplo: