Foros del Web » Programando para Internet » Python »

python usar closure como un decorator

Estas en el tema de python usar closure como un decorator en el foro de Python en Foros del Web. hola alguien sabe sobre este tema estoy algo confundido...
  #1 (permalink)  
Antiguo 17/02/2013, 18:28
 
Fecha de Ingreso: diciembre-2011
Mensajes: 408
Antigüedad: 12 años, 3 meses
Puntos: 18
python usar closure como un decorator

hola alguien sabe sobre este tema estoy algo confundido
  #2 (permalink)  
Antiguo 17/02/2013, 18:47
 
Fecha de Ingreso: diciembre-2011
Mensajes: 408
Antigüedad: 12 años, 3 meses
Puntos: 18
Respuesta: python usar closure como un decorator

tengo dos vistas

Código:
def custom_page(request,slug):
ocurre el evento mostrar vista
eventomostrarvista()
muesta vista por default....
y otra vista en otro modulo
Código:
@eventomostrarvista
def_otra_vista(request,slug):
muestra otra vista
cuando ocurre el evento eventomostrarvista quiero que muestre la vista def_otra_vista y no custom_page pero la verdad no se como hacerlo para que el codigo funcione
  #3 (permalink)  
Antiguo 17/02/2013, 18:49
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: python usar closure como un decorator

Ejemplo:
Código Python:
Ver original
  1. def makebold(fn):
  2.     def wrapped():
  3.         return "<b>" + fn() + "</b>"
  4.     return wrapped
  5.  
  6. def makeitalic(fn):
  7.     def wrapped():
  8.         return "<i>" + fn() + "</i>"
  9.     return wrapped
  10.  
  11. @makebold
  12. @makeitalic
  13. def hello():
  14.     return "hello world"
  15.  
  16. print hello() ## returns <b><i>hello world</i></b>


Esta es una excelente fuente para entender decoradores.
http://stackoverflow.com/questions/7...hon-decorators
  #4 (permalink)  
Antiguo 17/02/2013, 18:56
 
Fecha de Ingreso: diciembre-2011
Mensajes: 408
Antigüedad: 12 años, 3 meses
Puntos: 18
Respuesta: python usar closure como un decorator

hehehe no me entendiste, quiero que cuando el ejecute makebold(): ejecute def hello():

el problema es que no se crear eventos personalizados en python

por ejemplo cuando django accede a la url /hola/
ejecuta
el metodo def custom_page(request,slug):

dentro de ese metodo quiero crear un evento
que ejecute la vista correspondiente tipo django-socketio

osea lo que no quiero hacer es un import del modulo con la vista sino mas bien un evento que llame a esa funcion
  #5 (permalink)  
Antiguo 17/02/2013, 19:06
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: python usar closure como un decorator

Cita:
Iniciado por minimal Ver Mensaje
makebold(): ejecute def hello():
Entonces eso no es un decorador ni un closure.

Cita:
Iniciado por minimal Ver Mensaje
por ejemplo cuando django accede a la url /hola/
ejecuta
el metodo def custom_page(request,slug):
Por que así esta configurado en el url dispatcher.

Cita:
Iniciado por minimal Ver Mensaje
dentro de ese metodo quiero crear un evento
que ejecute la vista correspondiente tipo django-socketio
¿Por que mejor no pones la url /hola/ a esa vista en primer lugar?

Cita:
Iniciado por minimal Ver Mensaje
osea lo que no quiero hacer es un import del modulo con la vista sino mas bien un evento que llame a esa funcion
¿Que no es todo el punto del url dispatcher?

No entiendo muy bien lo quieres hacer, pero si quieres crear una manera al estilo socketio de crear eventos entonces puedes usar el patrón observer.
  #6 (permalink)  
Antiguo 17/02/2013, 19:37
 
Fecha de Ingreso: diciembre-2011
Mensajes: 408
Antigüedad: 12 años, 3 meses
Puntos: 18
Respuesta: python usar closure como un decorator

mm creo que python y django no pueden hacer lo que quiero, pero de todos modos muchas gracias

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:52.