вместо добавления необязательного аргумента и рефакторирования каждой функции (которая заставит меня дублировать логику Stringify во всех моих функциях) Я использовал декоратор: < /p>
Код: Выделить всё
from typing import Callable, Union
def WithStringifyOption(func: Callable[[int], int]) -> Callable[[int, bool], Union[int, str]]:
def wrapper(value: int, stringify: bool = False) -> Union[int, str]:
result = func(value)
return str(result) if stringify else result
return wrapper
# my old function
def func0(value: int) -> int:
return value * 2
# How it looks now
@WithStringifyOption
def func1(value: int) -> int:
return value * 2
func0(value=2)
func1(value=3, stringify=True)
Согласно документации Typing о typing.callable : br />
Нет никакого синтаксиса, чтобы указать необязательные или ключевые аргументы; Такие типы функций редко используются в качестве типов обратного вызова.
Так как я могу исправить эту ошибку печати? Примечание: это упрощенный пример моего реального проекта; Я хочу добавить гораздо более сложную логику на каждую из моих функций, поэтому рефакторирование всех моих функций, добавив и дублировать эту сложную логику не является вариантом. Я также не хочу добавлять тип: игнорировать везде в проекте, и я не хочу заменять все аргументы ключевых слов по позиционным аргументам везде в проекте
Подробнее здесь: https://stackoverflow.com/questions/734 ... d-argument