Как указать общий тип для TypedDict?Python

Программы на Python
Anonymous
Как указать общий тип для TypedDict?

Сообщение Anonymous »

Мне нужен класс со следующими членами:
  • функция 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

Вернуться в «Python»