Métodos generics en python.

¿Es posible implementar manejadores de métodos generics en Python que permitan la llamada de funciones no existentes? Algo como esto:

class FooBar: def __generic__method__handler__(.., methodName, ..): print methodName fb = FooBar() fb.helloThere() -- output -- helloThere 

Lo primero que hay que recordar es que los métodos son atributos que se pueden llamar .

 >>> s = " hello " >>> s.strip() 'hello' >>> s.strip  

Por lo tanto, puede manejar métodos no existentes de la misma manera que manejaría atributos no existentes.

Esto se hace __getattr__ definiendo un método __getattr__ .

Ahora vas a golpear la complejidad adicional que es la diferencia entre las funciones y el método. Los métodos deben estar vinculados a un objeto. Puede echar un vistazo a esta pregunta para una discusión de esto.

Así que creo que querrás algo como esto:

 import types class SomeClass(object): def __init__(self,label): self.label = label def __str__(self): return self.label def __getattr__(self, name): # If name begins with f create a method if name.startswith('f'): def myfunc(self): return "method " + name + " on SomeClass instance " + str(self) meth = types.MethodType(myfunc, self, SomeClass) return meth else: raise AttributeError() 

Lo que da:

 >>> s = SomeClass("mytest") >>> s.f2() 'method f2 on SomeClass instance mytest' >>> s.f2 > 

Sin embargo, probablemente recomiendo no usar esto. Si nos dice el problema que está tratando de resolver, espero que alguien aquí pueda encontrar una solución mejor.

 def __getattr__(self, name): #return your function here... 
 class FooBar: def __getattr__(self, name): def foo(): print name return foo a = FooBar() a.helloThere()