В приведенном ниже коде я написал декоратор, который просто принимает в качестве параметра некоторые функции и вызывает их перед вызовом украшенной функции. Поэтому, когда я использую этот сценарий, я получаю на выходе:Декоратор зависимостей без дубликатов
using f
using g
using f
using h
Но теперь наступает мой вопрос. Как это сделать, чтобы не дублировать зависимости? Итак, когда я использую h(), f() будет вызываться только один раз? Я попытался удалить дубликаты форм, но, например, для h() он содержит wapper и f(). Должен ли я собирать их по-другому?
class depends(object):
functs = []
def __init__(self, *f):
self.functs = []
for i in f:
self.functs.append(i)
def __call__(self, fun):
def wrapper():
for i in self.functs:
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()
+1 очень элегантный – shx2