You allow for Python “magic” at the cost of type safety. Or you forgo magic for types, and the resiliency that comes with it.
Day to day, you don’t need magic. With good application of hinting you can stop many bugs before they appear.
When you do need magic, you can usually construct it to work within the type system, or at the very least easily ringfence the tainted typeless code the magic introduced.
The sync/async contradiction is much worse to wrangle.
In my experience, it’s a manageable trade off.
You allow for Python “magic” at the cost of type safety. Or you forgo magic for types, and the resiliency that comes with it.
Day to day, you don’t need magic. With good application of hinting you can stop many bugs before they appear.
When you do need magic, you can usually construct it to work within the type system, or at the very least easily ringfence the tainted typeless code the magic introduced.
The sync/async contradiction is much worse to wrangle.