Foros del Web » Programando para Internet » Python »

¿Existe __call__ de PHP en Python?

Estas en el tema de ¿Existe __call__ de PHP en Python? en el foro de Python en Foros del Web. Hola, Estoy tratando de buscar algún símil de lo que es la función __call__ de PHP en Python. Un símil de __call__ en Python haría ...
  #1 (permalink)  
Antiguo 23/12/2012, 11:29
 
Fecha de Ingreso: septiembre-2006
Mensajes: 127
Antigüedad: 18 años, 2 meses
Puntos: 5
¿Existe __call__ de PHP en Python?

Hola,

Estoy tratando de buscar algún símil de lo que es la función __call__ de PHP en Python. Un símil de __call__ en Python haría lo siguiente:

Código Python:
Ver original
  1. class bar:
  2.     def __call__(self, name, *args):
  3.         print(name)
  4.         print(args)
  5.  
  6. foo = bar();
  7. foo.nombre(1,2,3,4);

donde imprimiría lógicamente:

nombre
[1,2,3,4]

Leí que lo más cercano a esto era __getattribute__ ó __getattr__ pero no funciona específicamente para hacer esto (obtener argumentos cualesquiera y el nombre del método)
  #2 (permalink)  
Antiguo 23/12/2012, 12:05
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 9 meses
Puntos: 1360
Respuesta: ¿Existe __call__ de PHP en Python?

Código Python:
Ver original
  1. class Bar(object):
  2.     def __getattr__(self, attr):
  3.         def default_method(*args, **kwargs):
  4.             print args, kwargs
  5.         return default_method
  6.  
  7. b = Bar()
  8. b.nombre(1, 2, 3, a=4)
  9. b.foo()

Supongo que quieres algo así.
  #3 (permalink)  
Antiguo 24/12/2012, 17:22
 
Fecha de Ingreso: septiembre-2006
Mensajes: 127
Antigüedad: 18 años, 2 meses
Puntos: 5
Respuesta: ¿Existe __call__ de PHP en Python?

Gracias, muchas gracias... exactamente esto estaba buscando

Etiquetas: call, gui, php
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 01:32.