Python типирование, соление и сериализация - PullRequest
0 голосов
/ 14 мая 2018

Я начал изучать систему ввода в Python и столкнулся с проблемой определения аргументов функций, которые можно выбирать. Не все в python может быть засечено, могу ли я определить аннотацию типа, которая говорит: «принимать только те объекты, которые могут быть разборными»?

Сначала это звучит как нечто, что должно быть возможно, похоже на Serializable в Java, но затем в python нет интерфейса Picklable, и немного больше размышляя над проблемой, мне приходит в голову, что засолка является неотъемлемой задачей времени выполнения , То, что можно мариновать перечисляет ряд вещей, которые можно мариновать, и нетрудно представить контейнер лямбда-функций, которые нельзя было бы мариновать, но я не могу придумать способ определить это раньше рука (не касаясь определения контейнера).

Единственный способ, которым я придумал, - это определить что-то вроде typing.Union[Callable, Iterable, ...] из всех вещей, перечисленных в Что можно мариновать , но это не похоже на хорошее решение.

1 Ответ

0 голосов
/ 15 мая 2018

Этот вопрос на github частично отвечает на этот вопрос, хотя проблема конкретно связана с json, а не pickle, но первый ответ от Гвидо должен по-прежнему применяться к pickle

Я пытался сделать это, но псевдоним рекурсивного типа в mypy сейчас не работает, и я не уверен, как заставить его работать. В то же время я использую JsonDict = Dict [str, Any] (что не очень полезно, но, по крайней мере, поясняет, что ключи являются строками), и Any для мест, где ожидается более общий тип JSON.

https://github.com/python/typing/issues/182

...