【发布时间】:2011-03-26 04:20:27
【问题描述】:
如何从孩子的基类访问装饰器?
我(错误地)认为 ffg.会工作:
class baseclass(object):
def __init__(self):
print 'hey this is the base'
def _deco(func):
def wrapper(*arg):
res = func(*arg)
print 'I\'m a decorator. This is fabulous, but that colour, so last season sweetiedarling'
return res
return wrapper
@_deco
def basefunc(self):
print 'I\'m a base function'
这个类工作正常,但是我创建了一个继承自这个的子类:
class otherclass(baseclass):
def __init__(self):
super(otherclass, self).__init__()
print 'other class'
@_deco
def meh(self):
print 'I\'m a function'
这甚至无法正确导入,更不用说运行了。 @_deco 未定义。尝试 baseclass._deco 会引发未绑定方法 _deco() 错误,这并不奇怪。
知道如何做到这一点,我真的很想将装饰器封装在类中,但我并没有接受这个想法,我需要在基类和子类中调用它。
【问题讨论】:
-
这个用例是一个用于 pylons 控制器的粗略时序装饰器。所以它需要可以从基类访问,因为那里有需要定时的函数,而子类中的函数需要定时。我想最简单的方法就是把它从课堂上撕下来。
-
您能更正您的格式吗?您的类的
def __init__与类定义的缩进相同。