4 ms·
That seems to handle deserialization? But would it protect you from assigning a value of the wrong type to the object later on?
by yunnpp 7mo ago
That seems to handle deserialization? But would it protect you from assigning a value of the wrong type to the object later on?
- LtWorf 7mo agoIt must be used in combination with a static checker to be useful. So you can do like a = typedload.load(json_data, int) and then "a" is considered to be an int and at runtime will be an int. Of course your static checker should prevent you from doing a + "string" later on because that would fail.
- maleldil 7mo agoThat depends on what you're using. If you're using Pydantic, which lets you define a struct-like data type with validation, you can tell it to validate assignments as well [1]. Or you can set the class as frozen and forbid assignment entirely [2]. However, if you mean annotating a local variable with a type, then no, nothing will stop it at runtime. If you use a type checker, though, it will tell you that statically. The ecosystem also offers other runtime validation options, such as beartype [3]. For example, you can annotate a function such that it always checks the data types of input parameters when called. You can even apply this to a whole module if you want, but I don't think that's commonly done. [1] https://docs.pydantic.dev/latest/api/config/#pydantic.config.ConfigDict.validate_assignment https://docs.pydantic.dev/latest/api/config/#pydantic.config... [2] https://docs.pydantic.dev/latest/api/config/#pydantic.config.ConfigDict.frozen https://docs.pydantic.dev/latest/api/config/#pydantic.config... [3] https://beartype.readthedocs.io/en/latest/eli5/ https://beartype.readthedocs.io/en/latest/eli5/
- LtWorf 7mo agoChecking types on all function calls adds a considerable amount of extra work that I personally am not willing to pay, especially since static type checkers exist.
- maleldil 7mo agoMe neither! I was just mentioning it as a possibility. My main use of beartype is `is_bearable` for runtime checking of specific data structures, in cases where `isinstance` isn't quite enough. I would still explore turning full checks during tests, though [1]. [1] https://github.com/beartype/pytest-beartype https://github.com/beartype/pytest-beartype