Пожалуйста, обратите внимание на следующий упрощенный пример:Python декоратор с аргументами только раз
permitted = True
class is_allowed(object):
def __init__(self, some_arg):
# this is actually needed in the complete code
self.some_arg = some_arg
def __call__(self, f):
if permitted == False:
raise Exception("not authenticated to do that")
def wrapped_f(*args, **kwargs):
f(*args, **kwargs)
return wrapped_f
@is_allowed("blah")
def print_hi():
print("hi")
print_hi()
permitted = False
print_hi()
Я думаю, проблема в том, что декоратор вызывается только один раз, когда функция print_hi() определена. Из-за этого изменение глобальной переменной не влияет. Есть ли способ обойти это поведение?
прохладный, спасибо. Принимая в 10мин;) – Stefan
в пользу OP, вы действительно должны это сделать: 'if allowed == False', как это:' if not allowed' – Anentropic
@ Anentropic да не поймал, что сначала, я обновил –