2010-04-24 14 views
5

¿Cómo agrego un método con un decorador a una clase? Probé¿Cómo agrego un método con un decorador a una clase en python?

def add_decorator(cls): 
    @dec 
    def update(self): 
     pass 

    cls.update = update 

uso

add_decorator(MyClass) 

MyClass.update() 

pero MyClass.update no tiene el decorador

@dec no se aplicaba a actualizar

estoy tratando de usar esto con orm.reconstructor en sqlalchemy.

+0

me fijo hasta su pregunta para reflejar lo que parece como si estuviera pidiendo - pero si estoy totalmente malinterpretó su intención, puede deshacer la edición y aclararla usted mismo. –

Respuesta

6

Si desea decorador de clase en Python> = 2.6 se puede hacer esto

def funkyDecorator(cls): 
    cls.funky = 1 

@funkyDecorator 
class MyClass(object): 
    pass 

o en Python 2.5

MyClass = funkyDecorator(MyClass) 

Pero parece que está interesado en el decorador de métodos, para lo cual puede hacer esto

def logDecorator(func): 

    def wrapper(*args, **kwargs): 
     print "Before", func.__name__ 
     ret = func(*args, **kwargs) 
     print "After", func.__name__ 
     return ret 

    return wrapper 

class MyClass(object): 

    @logDecorator 
    def mymethod(self): 
     print "xxx" 


MyClass().mymethod() 

Salida:

Before mymethod 
xxx 
After mymethod 

Así que en breve haya que sólo hay que poner @orm.reconstructor antes de definición del método

0

En la clase que representa su registro de SQL,

from sqlalchemy.orm import reconstructor 

class Thing(object): 
    @reconstructor 
    def reconstruct(self): 
     pass 
Cuestiones relacionadas