4 ms·
* Still weak support for JSON (use Dict[str, Any]) Python 3.8 added TypedDict which finally helps this particular shortcoming.
by Caligatio 7y ago
* Still weak support for JSON (use Dict[str, Any])
Python 3.8 added TypedDict which finally helps this particular shortcoming.
- staticassertion 7y agoWonderful, that's great to hear, and I can move to 3.8 quite easily myself. It's nice to see strong progress in such important areas. My post is probably overly critical, but I write Python almost every day, and maintaining a highly-typed library can be demoralizing at times.
- emptysea 7y agoBtw, TypedDict has been available in older versions of python via `mypy_extensions` from mypy_extensions import TypedDict https://github.com/python/mypy_extensions https://github.com/python/mypy_extensions
- avremel 7y agoI was surprised to find out that MyPy will throw an error if you use a variable to access a key (https://github.com/python/mypy/issues/7178 https://github.com/python/mypy/issues/7178). Optional keys are also a nuisance.
- dharmab 7y agoHow are optional keys a nuisance? I find that using the patterns: if "optional_key" in my_dict: do_something_with(my_dict["optional_key"]) Or: optional_value = my_dict.get("optional_key") if optional_value: do_something_with(optional value) Works as expected. Nested optional keys can be a bit annoying, although: my_dict.get("optional_parent", {}).get("optional_child") seems to work.
- avremel 7y agoI was referring to defining optional keys. If you have a dict with some keys which are optional, you need to create a separate subclass (with `total=False`) just for those optional keys. With TypeScript, I can just use `key?: type`. https://mypy.readthedocs.io/en/latest/more_types.html#mixing-required-and-non-required-items https://mypy.readthedocs.io/en/latest/more_types.html#mixing...
- ledauphin 7y agoin my experience, TypedDict has its own shortcomings, most of which boil down to the fact that it's not truly structural subtyping, because 'extra' keys are treated as errors.