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