Я хочу иметь условный декоратор.Ниже приведен мой код: -
def int_decorator(func): # checks whether the args passed is of type int.
def wrapper(*args, **kwargs):
a, b = args
if not (isinstance(a, int) and isinstance(b, int)):
return
return func(*args, **kwargs)
return wrapper
decorator_mapping = {
'int': int_decorator
}
class conditional_decorator(object):
def __init__(self, func):
self.func = func
def __call__(self, *args, **kwargs):
decorator = decorator_mapping.get(kwargs.get('decorator'))
if not decorator:
# Return the function unchanged, not decorated.
return self.func(*args, **kwargs)
return decorator(self.func(*args, **kwargs))
@conditional_decorator
def func(a, b, *args, **kwargs):
return(1)
print(func(1, 2, decorator='int'))
Что мне нужно, если в decorator_mapping
существует какой-либо декоратор, который соответствует значению, переданному в func
, затем примените тот же декоратор к функции, иначе не используйтеНе применяйте никакой декоратор.
Приведенный выше код хорошо работает, когда декоратор отсутствует, но не работает, когда декоратор найден.Это печатная ссылка function
.
Где я не прав?