Я пишу декоратор, который добавляет ключевые аргументы в упакованную функцию. В этом примере декоратор добавляет ключевые слова deco0
и deco1
def my_decorator(f):
def inner(arg0, *args, deco0='deco0', deco1='deco1', **kwargs):
"""We assume decoarted functions will take at least one positional arg0"""
print("Decorated({}, {})".format(deco0, deco1))
return f(arg0, *args, **kwargs)
return inner
@my_decorator
def add2(x):
return x + 2
@my_decorator
def my_mult(x, y):
return x * y
if __name__ == '__main__':
print(add2(5))
print(add2(5, deco0='BLA'))
print(my_mult(2, 10))
print(my_mult(2, 10, deco1='BLAM'))
Результаты как и ожидалось:
Decorated(deco0, deco1)
7
Decorated(BLA, deco1)
7
Decorated(deco0, deco1)
20
Decorated(deco0, BLAM)
20
Сигнатура функции inner
, возвращаемая декоратором, несовместима с python2:
File "./deco.py", line 5
def inner(arg0, *args, deco0='deco0', deco1='deco1', **kwargs):
^
SyntaxError: invalid syntax
Есть ли в Python2 шаблон проектирования, который облегчает декораторам добавление параметров ключевых слов? Или еще лучше: шаблон, совместимый с Python2 и Python3 одновременно?