¿Es posible personalizar el uso de la coma (e.g. [-100,100] , 5)?

No sé si fue adecuado el título del tema, pero me refiero a que en pilas se puede hacer esto:

mono.x = [-100,100],5

y entonces mono se mueve en x desde x = -100 hasta x = 100 en 5 segundos!, investigué algo sobre el lenguaje python pero no tengo claro como puedo agregar una coma adicional o utilizar otro símbolo para realizar otras acciones. Leí sobre el uso de decoradores dentro de las clases para por ejemplo:

pelotas = pilas.actores.Pelota()*10

y así se generen 10 pelotas usando el operador * aunque no estoy seguro si ustedes usaron decoradores para lograr esto. Agradecería mucho que me orienten para lograr algo similar usando la coma u otro operador, asignar acciones específicas a objetos diferentes de forma simultánea se implementaría muy rápido con esto.

Saludos y lo mejor para este genial proyecto y sus colaboradores este 2015!

Hola @jesuscirino

Sería buena idea que nos comentaras cual es el resultado en específico que deseas lograr, sin embargo abajo trataré de explicar algunos conceptos que comentas sobre el funcionamiento de la API de Pilas.

1 . ¿Es posible modificar el uso de la comma?

La coma es un recurso sintáctico para construir listas o tuplas, cuando escribes esta sentencia: mono.x = [-100,100],5 lo que en realidad estas haciendo es creando una tupla, que posteriormente va ser procesada por el actor mono(abajo explicaré esto). Incluso si en un interprete de Python sin Pilas Engine escribes: [-100,100],5 verás que acabas de crear una tupla. En resúmen, no es posible mediante código Python modificar el uso de coma. 5. Data Structures — Python 2.7.18 documentation

2 . ¿Cómo los actores de Pilas ‘saben’ si realizar una interpolación en segundos predetereminados, segundos personalizados o simplemente moverse de un lugar a otro?

Para entender la esctructura de un actor puedes ver el codigo en: https://github.com/hugoruscitti/python-pilas-experimental/blob/master/pilasengine/actores/actor.py

Aquí puedes ver lo que realmente es la propiedad x de un actor: https://github.com/hugoruscitti/python-pilas-experimental/blob/master/pilasengine/actores/actor.py#L552

Se usa el concepto de propiedades con definidores y obtenedores es decir; en lugar de permitir que a un atributo del actor le sea asignado cualquier tipo de dato sin reglas, lo que hacemos es escribir una especie de filtro para actuar de una otra manera según sea el caso.

Cuando escribes esta sentencia: mono.x = [-100, 100], 5 lo que realmente es ejecuta es este método: https://github.com/hugoruscitti/python-pilas-experimental/blob/master/pilasengine/actores/actor.py#L448

Cómo te darás cuenta la funcionalidad es delegada a otro método que es este: https://github.com/hugoruscitti/python-pilas-experimental/blob/master/pilasengine/utils/__init__.py#L65 el cual es quien en realidad se ocupa de decidir que hacer según el tipo de dato que se le hayan pasado.

Aquí el uso de properties y doc 2. Built-in Functions — Python 2.7.18 documentation

3 . ¿Como funciona la multiplicación de actores?

Es un concepto parecido a la sobrecarga de operadores, sin embargo lo que realmente hace es que un objeto persoalizado, por ejemplo un actor, emule los operadores que son usados con tipos de datos númericos, cómo (*, /, -, +, >, <, ==). Esto está ligado al Data Model de los objetos en Python.

Aquí cómo se multplican los actores: https://github.com/hugoruscitti/python-pilas-experimental/blob/master/pilasengine/actores/actor.py#L918

Doc: 3. Data model — Python 2.7.18 documentation
Doc extra: http://rafekettler.com/magicmethods.html#operators

Espero haber aclarado tus dudas, gracias por tus deseos, igualmente.

2 Likes

Gracias @irvingprog! Estoy estudiando tu respuesta (una ilustrativa clase de python). Mi duda la resolviste y replantearé lo que quería hacer, de nuevo gracias.