Pasar un objeto como argumento a un Actor

¡Hola!

Primero que nada quiero felicitarlos y agradecerles por PilasEngine, la verdad que me está gustando mucho y lo veo muy interesante para seguir aprendiendo y ver qué cosas se pueden hacer.

Necesitaba consultar por algo que me dejó pensando: cómo pasar objetos como argumentos a un Actor.

El tema viene así:

A fines de dejar en claro el inconveniente voy a dejar el siguiente código

# coding: utf-8
import pilasengine

pilas = pilasengine.iniciar()

class Objeto(object):
    def __init__(self, valor):
        self.valor = valor

class UnActor(pilasengine.actores.Actor):
    def iniciar(self, parametroComun, parametroObjeto):
        self.parametroComun = parametroComun
        self.parametroObjeto = parametroObjeto
    def actualizar(self):
        pass

obj = Objeto(10)
a = UnActor(pilas, 5, 10)

pilas.ejecutar()

El código es muy sencillo. Hay definidos dos clases, una es un actor personalizado (hereda de Actor) y el otro es un objeto sin ningún uso especial (a fines prácticos) que tiene un solo campo. Si creo el Actor con los parámetros 5 y 10 no hay inconvenientes, los asigna a sus atributos. Pero si quiero usar el objeto recién definido obj de la siguiente forma

a = UnActor(pilas, 5, obj)

Da un error.

× # Exception: El parametro y tiene un valor no permitido:

Si quiero pasarle el valor del objeto, no me da problema

a = UnActor(pilas, 5, obj.valor)

Por lo cual no parece ser un problema de los objetos, si no que parece que tiene que ver con la forma en que trata a los objetos en sí el método iniciar().

No entiendo cuál sería la forma correcta de pasarle un objeto como argumento a una clase. Por lo que estuve viendo parece que la forma correcta sería definiendo __init__() en la clase personalizada, pero no encontré ni en la API ni en el Manual cómo sería una forma correcta de utilizar dicha forma.

¿Alguien podría darme una mano con ésto y explicarme por qué no se puede pasar objetos directamente a un Actor?

¡Muchísimas gracias, saludos!

Hola @JuanQP

De esta manera puedas pasar cualquier tipo de objeto cómo argumentos a tus actores:

a = UnActor(pilas, parametroComun=10, parametroObjeto=obj)

Haciendo explícito el nombre del parametro que definiste en la función “iniciar()”

Saludos

1 Like

Eso soluciona el inconveniente perfectamente :smile:

Muchísimas gracias @irvingprog !

Saludos!