es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Una forma de agregar esta funcionalidad es usar un ciclo for para iterar a través de la lista npc_info y verificar si la entrada del usuario está en ella. Si lo está, puedes crear un nuevo objeto EnemyCreator con los parámetros de la lista y pasarlo a la función attack().

    Por ejemplo:

    async def on_message(message):
        print(message.content)
        if message.author != client.user:
            if 'prueba' en message.content.lower():
                print(npc_info)
            if '!atacar' in message.content.lower():
                for info in npc_info:
                    if message.content[8::] in info:
                        nombre, salud, pa = info.split(',')
                        enemigo = EnemyCreator(nombre, 'enemigo', int(salud), int(pa))
                        await message.channel.send(attack(enemigo))
                        break
    

Comments are closed.