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