class depends(object):
done = []
def __init__(self, *f):
self.functs = f
def __call__(self, fun):
def wrapper():
for i in self.functs:
if i not in depends.done:
i()
depends.done.append(i)
return fun()
return wrapper
def f():
print 'using f'
@depends(f)
def g():
print 'using g'
@depends(g, f)
def h():
print 'using h'
h()
您需要全局记住已处理的依赖关系,例如在类变量中,请参见
depends.done
此处:您需要检查是否有任何依赖函数是以这种方式修饰的,并从当前修饰函数的依赖项中排除它们的依赖项。在
此检查需要递归执行。在
如果你同时使用其他的装饰器,这会变得更加困难。在
我真的很想知道为什么以及如何使用这个结构。在
Python已经在其
super
调用机制中内置了类似这样的东西。但是,要利用super
,必须将依赖项转换为基类:相关问题 更多 >
编程相关推荐