- функция f, принимающая аргумент типа In и kwargs, заданные параметрами
- функцией make_parameters, которая возвращает параметры, которые можно напрямую передать в f
In = TypeVar("In", contravariant=True)
Out = TypeVar("Out", covariant=True)
Parameters = TypeVar("Parameters", bound=TypedDict)
class Function(Generic[In, Out, Parameters]):
class FProtocol(Protocol):
def __call__(self, x: In, **parameters: Unpack[Parameters]) -> Out: ...
def __init__(
self,
f: FProtocol,
make_parameters: Callable[[], Parameters],
) -> None:
super().__init__()
self._f = f
self._make_parameters = make_parameters
def __call__(self, x: In) -> Tuple[Out, Parameters]:
parameters = self._make_parameters()
return self._f(x, **parameters), parameters
Однако подсказки типов не работают:
- Я не могу связать параметры от TypedDict
- Unpack ожидает TypedDict
Я хотел бы иметь возможность использовать свой класс следующим образом:
def example_f(x: float, a: float, b: float) -> float:
return a * x + b
class ExampleParameters(TypedDict):
a: float
b: float
f = Function[float, float, ExampleParameters](example_f, lambda: {"a": 1.0, "b": 2.0})
Подробнее здесь: https://stackoverflow.com/questions/785 ... -typeddict