注意:
在另一个问题上接受的答案显示了如何使用父装饰器.
此问题上接受的答案显示将装饰器移动到模块范围.
编辑:使用前面的例子是一个坏主意.希望这更清楚:
class A:
def deco( func ):
print repr(func)
def wrapper( self, *args ):
val = func( *args )
self.do_something()
return val
return wrapper
def do_something( self ):
# Do something
print 'A: Doing something generic for decoration'
@deco
def do_some_A_thing ( self ):
# Do something
print 'A: Doing something generic'
class B ( A ):
@deco
def do_some_B_thing( self ):
# Do something
print "B: Doing something specific"
a = A()
b = B() …Run Code Online (Sandbox Code Playgroud)