У меня есть функции, которые возвращают функции валидатора, простой пример:
def check_len(n):
return lambda s: len(s) == n
Можно ли добавить декоратор, который выводит сообщение, если проверка оценивается как ложная? Примерно так:
@log_false_but_how
def check_len(n):
return lambda s: len(s) == n
check_one = check_len(1)
print(check_one('a')) # returns True
print(check_one('abc')) # return False
Ожидаемый результат:
True
validator evaluated to False
False
Я пытался создать аннотацию, но с помощью нее могу получить доступ только к созданию функции. Одним из способов было бы определить функции следующим образом:
def log_false(fn):
def inner(*args):
res = fn(*args)
if not res:
print("validation failed for {}".format(fn.__name__))
return res
return inner
@log_false
def check_one(s):
return check_len(1)(s)
Но при этом мы теряем динамическое создание функций проверки.