Приведенный ниже (упрощенный) код работает FINE.В двух словах: динамический аргумент, передаваемый моей функции, используется декоратором, а НЕ декорированной функцией.Но я получаю эту досадную ошибку Pylint (" Слишком много позиционных аргументов для вызова функции "). Я знаю, что могу отключить эту ошибку в настройках своего IDE / редактора (или используя опцию отключения inline Pylint) .Я также знаю, что есть и другие решения, которые генерируют другие предупреждения linter (например, неиспользуемый аргумент и т. Д.).
Итог: было бы здорово, если бы я мог понять, один раз идля всех, самый "Pythonic способ" написать это способом, который не расстраивает линтера.
def my_decorator(func):
''' dummy decorator '''
def wrapper(incoming_data):
if incoming_data['flag']:
# run the decorated function (NO ARGUMENTS needed):
return func()
# run some other code
return "I did something ELSE"
return wrapper
@my_decorator
def do_something():
''' dummy function '''
return "I ran the decorated function"
if __name__ == '__main__':
my_data_1 = dict(flag=True,
not_needed="useless_data")
result = do_something(my_data_1)
print(result) # "I ran the decorated function"
my_data_2 = dict(flag=False,
not_needed="useless_data")
result = do_something(my_data_2)
print(result) # "I did something ELSE"