4 ms·
Python does ignore them at runtime, but as long as you're validating your inputs (e.g. using Pydantic for HTTP request validation) then you can trust that the s
by goodoldneon 5y ago
Python does ignore them at runtime, but as long as you're validating your inputs (e.g. using Pydantic for HTTP request validation) then you can trust that the static types are truthful
- musingsole 5y ago> trust that the static types are truthful That's often a mistake even in typed languages like typescript. Satisfying a static type analyzer isn't enough. Real data is whatever it is going to be. If your types are meaningless at runtime, you can easily encounter type mismatches. Static typing as implemented in typescript and python type hints is a tool for engineers instead of a tool for systems.
- roywiggins 5y agoThe types are usually ignored, but not entirely erased- Pydantic uses type hints to do validation at runtime, so if you construct a Pydantic object with invalid data it will throw an error, so eg foo=PydanticFoo(**request.json()) Will try and validate a json request against the implied schema provided by the type hints on PydanticFoo while constructing it and will throw if it fails.
- goodoldneon 5y agoYou missed my point. If you validate input, then the static types are representative of runtime types
- musingsole 5y agoAck, so I did :P
- lelandbatey 5y agoI want to emphasize for folks reading: if you want actual type enforcement and you want that type enforcement with minimum boilerplate, Pydantic is a fantastic option (I'm sure there are others as well). It's a great library that's totally use-agnostic (it's not HTTP specific, you can use it for whatever) and quite tight. Caveats are that it uses runtime validation to enforce types so there's a performance cost, but it's a performance hit that is mostly eclipsed by all the other huge performance hits that litter your typical Python implementation. Pydantic is amazing!
- mixmastamyk 5y agoIIRC, pydantic was quite big and I chose typeguard instead for a smaller project. Might be an option.