如何在python中向类添加带有装饰器的方法?

如何在python中向类添加带有装饰器的方法?,python,decorator,Python,Decorator,如何向类添加带有装饰器的方法?我试过了 def add_decorator( cls ): @dec def update(self): pass cls.update = update 用法 但是MyClass.update没有decorator @dec未应用于更新 我试图将其用于sqlalchemy中的orm.recostructor。在表示SQL记录的类中 from sqlalchemy.orm import reconstructor cl

如何向类添加带有装饰器的方法?我试过了

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

    cls.update = update
用法

但是MyClass.update没有decorator

@dec未应用于更新


我试图将其用于sqlalchemy中的
orm.recostructor

在表示SQL记录的类中

from sqlalchemy.orm import reconstructor

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

如果您想要python>=2.6中的类装饰器,可以这样做

def funkyDecorator(cls):
    cls.funky = 1

@funkyDecorator
class MyClass(object):
    pass
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()
或者在python 2.5中

MyClass = funkyDecorator(MyClass)
但看起来您对方法装饰器感兴趣,您可以为此进行此操作

def funkyDecorator(cls):
    cls.funky = 1

@funkyDecorator
class MyClass(object):
    pass
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()
输出:

Before mymethod
xxx
After mymethod

因此,简而言之,您只需在方法定义之前放置
@orm.recostructor

我修正了您的问题,以反映您提出的问题-但如果我完全误解了您的意图,请随时回滚编辑并亲自澄清。