▲ | JackSlateur 4 days ago | |||||||||||||||||||||||||||||||||||||||||||
This is true, there is a performance cost Apart from what has been said, I find pydantic interesting even in the middle of my code: it can be seen as an overpowered assert It helps making sure that the complex data structure returned by that method is valid (for instance) | ||||||||||||||||||||||||||||||||||||||||||||
▲ | duncanfwalker 4 days ago | parent | next [-] | |||||||||||||||||||||||||||||||||||||||||||
Yeah, I'd agree with that. Validation rules are like an extension to the type system. Invariants are useful at the edges of a system but also in the core. If, for example, I can be told that a list is non-empty then I can write more clean code to handle it. In Java they got around the external-dependency-in-the-core-model problem by making the JSR-380 specification that could (even if only in theory) have multiple implementations. In clojure you don't need to worry about another external dependency because the spec library is built-in. One could argue that it's still a dependency even if it's coming from the standard library. At the point I'd say, why are we worried about this? it's to isolate our core from unnecessary reasons to change. I get that principled terms it's not right but, if those libraries change on API on a similar cadence to the programming language syntax, then it doesn't impact in practical terms. It's these kind of pragmatic compromises that distinguish Python from Java - after all, 'worse is better'. | ||||||||||||||||||||||||||||||||||||||||||||
▲ | codethief 4 days ago | parent | prev [-] | |||||||||||||||||||||||||||||||||||||||||||
You could also use a TypedDict for that, though? PEP 764[0] will make them extra convenient. | ||||||||||||||||||||||||||||||||||||||||||||
|