hbutils.design.decorator¶
- Overview:
Some useful utilities for decorator pattern and python decorators for function or class.
decolize¶
-
hbutils.design.decorator.
decolize
(deco: Callable[[…], Callable])[source]¶ - Overview:
Decorator for decorator, make a decorator function with keyword-arguments usable as the real python decorator.
- Arguments:
deco (
Callable[..., Callable]
): Decorator function to be decorated.
Examples:
>>> from functools import wraps >>> @decolize # decorate the decorator ... def deco(func, a=1, b=2): ... @wraps(func) ... def _new_func(*args, **kwargs): ... return func(*args, **kwargs) * a + b ... ... return _new_func >>> @deco # used as simple decorator, same as deco(_func_1) >>> def _func_1(a, b, c): ... return (a + b * 2) * c >>> @deco(a=2) # used as parameterized decorator, same as deco(_func_2, a=2) >>> def _func_2(a, b, c): ... return (a + b * 2) * c >>> _func_1(1, 2, 3) 17 # ((1 + 2 * 2) * 3) * 1 + 2 == 17 >>> _func_2(1, 2, 3) 32 # ((1 + 2 * 2) * 3) * 2 + 2 == 32
Tip
This decorator can be useful when build a decorator with parameters.
Note
In the decorated decorator, only keyword arguments are supported. So make sure the original decorator function’s parameter (except
func
) are all keyword supported, and do not try to use positional arguments when use it to decorator another function.