Sintaxis práctica.

Chema Cortés py en ch3m4.org
Mar Jun 15 20:55:54 CEST 2004


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

El Martes, 15 de Junio de 2004 18:20, Hernán Martínez Foffani escribió:

> No estoy seguro que el operador composicion (de existir) sea
> equivalente o sirva como alternativa a los decoradores.
> En composicion, F o G (x) == F(G(x)) donde la Imagen de G es
> el Dominio de F.  Pero el decorador es una transformacion
> de la propia funcion donde el Dominio es la propia funcion,
> no la Imagen de ella. Me parece que eso es conceptualmente
> diferente.

Conceptualmente, deberían ser diferentes. Pero en el uso de decoradores para 
convertir métodos y propiedades realmente se están transformando los dominios 
de las funciones.


> Usando la composicion como alternativa a los decoradores
>
>   class Pepe(object):
>     def square(x):
>       return x*x
>     square = staticmethod(square)
>
> sería
>
>   class Pepe(object):
>     def square(x):
>       return x*x
>     square = staticmethod . square
>
> manteniendo `assert staticmethod(4) == Pepe.square(2)`
> Y esto ultimo es imposible.

No entiendo bien lo que quieres decir con este assert, aunque yo hubiera 
cambiado el orden de la composición, ya que staticmethod es el que tiene que 
adaptar las llamadas (wrapper):

  square = square * staticmethod   # me gusta más usar '*' como operador

también

  square *= staticmethod


Se debería establecer una jerarquía así:

type --> function --> staticmethod

con lo que podría ser:

  class Pepe(object):
    class square(staticmethod):
      def __call__(x):
         return x*x


Se estaría usando Pepe.square como un objeto en lugar de una clase, pero 
podría dar más juego para hacer otras muchas cosas (añadir atributos como 
"decoradores", currificar funciones, programación por contrato, etc)


PD: tendría que pensarlo mejor, pero es que en este preciso momento comienzo 
una cortas vacaciones :-P  Mis disculpas adelantadas porque no voy a 
responder mensajes en un tiempo.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.2 (GNU/Linux)

iD8DBQFAz0Y+HLTQrABk8H0RAk36AKCbmPGKkSQT6T9nh8T8BIXYwzqCaQCfTCKi
u6WCns0YTH7TnIcFw576nYk=
=UwAb
-----END PGP SIGNATURE-----




Más información sobre la lista de distribución Python-es